引用別人的話:
就是把腳本的路徑傳入解釋器中去執行:
- sh test.sh
-
或者
- bash test.sh
這兩者略有區別,我沒有整理過完整的差異,但至少對於 echo 命令來說,以下命令在兩種解釋器下得到的結果是不一樣的: - echo -e “hello\nworld”
bash 會正確的將 \n 解釋爲換行符,sh 則不能。個人建議統一使用 bash 即可
利用解釋器執行 Shell 腳本,實際上是在當前的 Shell 環境中啓動了一個子進程去執行。
直接輸入文件名運行
下面這行命令同樣可以用來執行腳本:
- ./test.sh
此時要求腳本文件必須是可執行的,否則將會報錯: - zsh: permission denied: ./test.sh
解決方法是變更文件的權限:chmod +x test.sh 然後再執行就可以了。這種運行方式也是新建一個子 Shell 去執行腳本。
有的讀者可能會問,系統怎麼知道這是 Shell 腳本而不是其他語言呢?實際上並不是通過文件名後綴來區分的,可以舉個例子: - #! /usr/bin/python
- print “11”
這裏用 Python 語法寫了一個腳本,但是後綴名保存爲 sh,如果我們直輸入名稱去執行,一樣可以得到正確的結果: - ./py.sh
-
輸出 11
這裏的 #! 被稱爲 shebang,用來指定使用什麼解釋器去執行腳本。因此,規則可以簡單概括如下:
- 如果直接寫明瞭解釋器,比如 sh xxx.sh,會以顯式指定的解釋器爲準,shebang 不生效。
- 如果直接寫可執行文件的名字,則以 shebang 指定的解釋器爲準。
- 如果沒有指定 shebang,默認是 bash,不會參考文件名的後綴。