天天看點

linux bash 和 sh的差別

linux 中的 shell 有很多類型,其中最常用的幾種是: bourne shell (sh)、c shell (csh) 和 korn shell (ksh), 各有優缺點。bourne shell 是 unix 最初使用的 shell,并且在每種 unix 上都可以使用, 在 shell 程式設計方面相當優秀,但在處理與使用者的互動方面做得不如其他幾種shell。linux 作業系統預設的 shell 是bourne again shell,它是 bourne shell 的擴充,簡稱 bash,與 bourne shell 完全向後相容,并且在bourne shell 的基礎上增加、增強了很多特性。bash放在/bin/bash中,它有許多特色,可以提供如指令補全、指令編輯和指令曆史表等功能,它還包含了很多 c shell 和 korn shell 中的優點,有靈活和強大的程式設計接口,同時又有很友好的使用者界面。

    gnu/linux 作業系統中的 /bin/sh 本是 bash (bourne-again shell) 的符号連結,但鑒于 bash 過于複雜,有人把 ash 從 netbsd 移植到 linux 并更名為 dash (debian almquist shell),并建議将 /bin/sh 指向它,以獲得更快的腳本執行速度。dash shell 比 bash shell 小的多,符合posix标準。

    ubuntu繼承了debian,是以從ubuntu 6.10開始預設是dash shell。

 luotaijia@ubuntu:~$ ls -l /bin/sh /bin/bash

 -rwxr-xr-x 1 root root 801808 2010-08-11 03:58 /bin/bash

 lrwxrwxrwx 1 root root 4 2012-11-28 08:06 /bin/sh -> dash

    應該說, /bin/sh 與 /bin/bash 雖然大體上沒什麼差別, 但仍存在不同的标準. 标記為 “#!/bin/sh” 的腳本不應使用任何 posix 沒有規定的特性 (如 let 等指令, 但 “#!/bin/bash” 可以). debian 曾經采用 /bin/bash 更改 /bin/dash,目的使用更少的磁盤空間、提供較少的功能、擷取更快的速度。但是後來經過 shell 腳本測試存在運作問題。因為原先在 bash shell 下可以運作的 shell script (shell 腳本),在 /bin/sh 下還是會出現一些意想不到的問題,不是100%的兼用。

1 a=12345 

3 let "a += 1"

4 echo "a = $a"

6 b=${a/23/bb}

7 echo "b = $b"

luotaijia@ubuntu:~/文檔/shell學習練習$ /bin/sh 3.2..1.sh 

3.2..1.sh: 3: let: not found

a = 12345

3.2..1.sh: 6: bad substitution

luotaijia@ubuntu:~/文檔/shell學習練習$ /bin/bash 3.2..1.sh 

a = 12346

b = 1bb46

luotaijia@ubuntu:~/文檔/shell學習練習$

特别說明:尊重作者的勞動成果,轉載請注明出處哦~~~http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt189

繼續閱讀