ksh和bash區別


一、實踐證明,在AIX上用的是ksh,linux上是bash

sh或bsh,全名是bourne shell。它最早出現,是標准shell。后兩者都兼容它。
ksh和bash后續加入了歷史記錄,交互特性,數組,等新功能。
ksh在unix上使用較多。比如hpux,AIX
bash在linux上使用較多。

也可以用這些做命令跳到另一個shell,看個人習慣用哪個:
jimmy-cao@jimmycao-ThinkPad-Edge:~$ sh
$ bash
jimmy-cao@jimmycao-ThinkPad-Edge:~$ ksh
$

bash可以使用tab鍵補全,ksh貌似不能

二、使用上的具體區別,轉的

(1) 在ksh是,數組的index只能從0到1023,而bash中沒有這樣的限制。
(2) ksh與bash初始化數組的語法不同:
如下所示
icymoon# ksh
icymoon# set -A array 1 2 3 4 5; echo ${array[3]};
4
icymoon# bash
icymoon# array=(1 2 3 4 5); echo ${array[3]};
4
icymoon# array=([0]=1 [3]=2 [2]=3); echo ${array[3]}
2
 
1. 內置read命令
read VARIABLE?\ "xxxxxxxxxxxxxx"
2. 反義循環
until [[ ... ]] #這里的[[ ]]是ksh的括號,比sh的[]括號,[[]]能夠支持更多,更強大的命令行選項
do
   xxxxxxx
done

2. 字符串的操作
我們有basename取出文件名,但是如果需要得到目錄名呢?
FULLPATH=`pwd`/$0
DIR=${FULLPATH%${FILENAME}}#從變量FULLPATH的最后開始,搜索第一個FILENAME的匹配,並刪除
              %%                               后面        最后一個
              #                                前面        第一個
              ##                               后面        最后一個
DIR=${DIR%\/}              #去掉反斜杠 
basename=$(filename%%.cpp) #去掉文件名的.cpp后綴

3. 布爾操作
sh的布爾操作是-a -o,ksh可以 if [[ test1 && test2 ]]就像C語言的邏輯操作一樣

4. 把一個字符串拆成一個數組,元素之間是以空格或tab分隔
set -A Array $input
if [[ -z ${Array[0]} ]]echo"空的數組"
取數組下標和C語言類似,當然必須用${}包含

5. for數據(sh兼容)
for file in $inputfiles
do
  cat $file|tr '[A-Z]' '[a-z]'|sed -e '/^$/d' -e '/^#/d'
#所有字符變成小寫,並刪除空行和注釋行('#'開頭)
done
 
6. 尋找新的文件 NEWER=`find $CLASSFILE -newer $JAVAFILE`
  
7. 直接數學計算 
$ let x=0 
$ let x=x+2 
不需要使用expr反復計算


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM