前言
撰寫 bash 的 程式碼可以幫助我們自動化完成一連串的指令,
(或者我們也會說這是一種「腳本」,會自動完成一些事情)
以下的功能,建立在 「chmod +x」 的條件下才有用
如果沒有下「chmod +x」,使變成 .sh 執行檔
- 則會有以下兩種情況:
./test.sh:會以預設的 shell 執行,例如 sh (dash)、或有安裝 zsh, fish 的話
(可能會有語言不通無法執行的問題,即使有加 #!/bin/bash)
bash ./test.sh:指定 bash 的語言,來解釋執行腳本
zsh ./test.sh:指定 zsh 的語言,來解釋執行腳本,其他以此類推
作為宣告解釋這份腳本的語言使用
有時候我們看到任何一份 “.sh” 開頭的檔案,
第一行都會寫
#!/bin/bash
這其實就是在宣告,這份腳本的執行,
請用 bash 的語言來解釋他,
sh 系列的語言有很多種,雖然大同小異,
但實際上功能依然有些微的差別,
例如有些 bash 有的指令,換成 zsh 可能就有不同的寫法。
影響
如果我們沒有加入這行指定使用的 shell script,
大部分情況可能都沒有問題,
(那是因為語言共通性高的緣故),
但碰到一些語言不共通的時候,例如 sh, bash
sh 其實是 dash 的縮寫,讀者有興趣的話可以看下方的說明。
我們可以透過以下指令來看現在電腦中有哪些可使用的 shell script
cat /etc/shells
確認現在 terminal 使用的 shell script
echo $SHELL
科普類
sh 其實是某一個語言的簡稱
我們可以透過以下指令來看,現在是用什麼來解釋 sh 這個語言
ls -l /bin/sh
我們可能得到結果是:
lrwxrwxrwx 1 root root 4 八 13 2020 /bin/sh -> dash
表示 sh 其實是 dash 的 soft link (捷徑),並不等同於 bash
這也是為什麼有時候 「sh ./test.sh」、 「bash ./test.sh」會有一個可執行,
另外一個不可執行的原因
延伸閱讀:[Linux] sh 和 bash 之間的差異