什麼是bash ?
bash(gnu bourne-again shell)是許多linux平台的內定shell,事實上,還有許多傳統unix上用的shell,像tcsh、csh、ash、bsh、ksh等等。
gnu/linux 作業系統中的 /bin/sh 本是 bash (bourne-again shell) 的符號鏈結,但鑑於 bash 過於複雜,有人把 bash 從 netbsd 移植到 linux 並更名為 dash (debian almquist shell),並建議將 /bin/sh 指向它,以獲得更快的指令碼執行速度。dash shell 比 bash shell 小的多,符合posix標準。
debian和ubuntu中,/bin/sh預設已經指向dash,這是乙個不同於bash的shell,它主要是為了執行指令碼而出現,而不是互動,它速度更快,但功能相比bash要少很多,語法嚴格遵守posix標準。
就是這個倒霉的dash直譯器使得我按照bash語法寫的shell 指令碼不能執行。
要知道自己的/bin/sh指向何種直譯器,可以用ls /bin/sh -al命令檢視:
$ ls /bin/sh -al
lrwxrwxrwx 1 root root 4 11月 16 15:33 /bin/sh -> bash
以上結果就表示當前系統用的是dash直譯器。
切換到bash的方式其實挺簡單的,關鍵是一直沒找出這個原因……
修改預設的sh,可以採用命令sudo dpkg-reconfigure dash
注:dash 和 bash 語法上的主要的區別有:
1.定義函式bash: function在bash中為關鍵字
dash: dash中沒有function這個關鍵字
2.select var in list; do command; done
bash:支援
dash:不支援, 替代方法:採用while+read+case來實現
3. echo
bash:支援展開
dash:不支援,替代方法, 採用seq外部命令
4. here string
bash:支援here string
dash:不支援, 替代方法:可採用here documents
5. >&word重定向標準輸出和標準錯誤
bash: 當word為非數字時,>&word變成重定向標準錯誤和標準輸出到檔案word
dash: >&word, word不支援非數字, 替代方法: >word 2>&1; 常見用法 >/dev/null 2>&1
6. 陣列
bash: 支援陣列, bash4支援關聯陣列
dash: 不支援陣列,替代方法, 採用變數名+序號來實現類似的效果
7. 子字串擴充套件
bash: 支援$,$
dash: 不支援, 替代方法:採用expr或cut外部命令代替
8. 大小寫轉換
bash: 支援$,$,$,$
dash: 不支援,替代方法:採用tr/sed/awk等外部命令轉換
9. 程序替換<(command), >(command)
bash: 支援程序替換
dash: 不支援, 替代方法, 通過臨時檔案中轉
10. [ string1 = string2 ] 和 [ string1 == string2 ]
bash: 支援兩者
dash: 只支援=
11. [[ 加強版test
bash: 支援[[ ]], 可實現正則匹配等強大功能
dash: 不支援[[ ]], 替代方法,採用外部命令
12. for (( expr1 ; expr2 ; expr3 )) ; do list ; done
bash: 支援c語言格式的for迴圈
dash: 不支援該格式的for, 替代方法,用while+$((expression))實現
13. let命令和((expression))
bash: 有內建命令let, 也支援((expression))方式
dash: 不支援,替代方法,採用$((expression))或者外部命令做計算
14. $((expression))
bash: 支援id++,id--,++id,--id這樣到表示式
dash: 不支援++,--, 替代方法:id+=1,id-=1, id=id+1,id=id-1
NAS SAN和DAS的區別
目前磁碟儲存市場上,儲存分類 如下表一 根據伺服器型別分為 封閉系統的儲存和開放系統的儲存.封閉系統主要指大型機,as400等伺服器,開放系統指基於包括windows unix linux等作業系統的伺服器 開放系統的儲存分為 內建儲存和外掛程式儲存 開放系統的外掛程式儲存根據連線的方式分為 直連式...
C Shell 和 Bash的區別
在公司寫c shell習慣了,在家裡寫bash還真有點不習慣。下面將不同的問題羅列一下。發現一點更新一點。1.變數的宣告 csh set value1 1 等號兩邊可以有空格 bash value 1 等號兩邊千萬不要有空格,如果有空格則出現下面錯誤 不是有效的識別符號 2.變數的使用 相同的 ec...
bash的測試和比較
比較字串 string1 string2 等價於 string1 string2 比較整數 num1 eq num2 等價於 num1 num2 變數值不為空,且變數值中不包含空格的情況下,變數可不加雙引號,當然加了雙引號也可以 變數值為空或變數值中包含空格的情況下,變數一定要加雙引號 或變數沒有申...