【shell】如何執行shell腳本

希望各位不要白piao,點個贊或者刷個評論再走,還有【禁止轉載】
這篇文章就是講解如何執行shell腳本,以及不同執行腳本方式是如何調用的.以及理解sh xxx.sh和 source xxx.sh的區別(我手頭的筆記比較多,只能慢慢發,如果真的有某一方面特別的需求,可以在評論中回覆,如果我有相關的資料我會優先發出來)
@note:如果不會編寫shell腳本,看我另一篇文章傻瓜式shell編寫

如何執行一個shell腳本

執行腳本

編寫一個簡單的腳本test.sh:
#! /bin/sh
cd ..
ls
Shell腳本中用#表示註釋,相當於C語言的//註釋。但如果#位於第一行開頭,並且是#!(稱爲Shebang)則例外,它表示該腳本使用後面指定的解釋器/bin/sh解釋執行。如果把這個腳本文件加上可執行權限然後執行:
chmod a+x test.sh
./test.sh
Shell會fork一個子進程並調用exec執行./test.sh這個程序,exec系統調用應該把子進程的代碼段替換成./test.sh程序的代碼段,並從它的_start開始執行。然而test.sh是個文本文件,根本沒有代碼段和_start函數,怎麼辦呢?其實exec還有另外一種機制,如果要執行的是一個文本文件,並且第一行用Shebang指定了解釋器,則用解釋器程序的代碼段替換當前進程,並且從解釋器的_start開始執行,而這個文本文件被當作命令行參數傳給解釋器。因此,執行上述腳本相當於執行程序
/bin/sh ./test.sh
以這種方式執行不需要test.sh文件具有可執行權限。
如果將命令行下輸入的命令用()括號括起來,那麼也會fork出一個子Shell執行小括號中的命令,一行中可以輸入由分號;隔開的多個命令,比如:
(cd ..;ls -l)
和上面兩種方法執行Shell腳本的效果是相同的,cd …命令改變的是子Shell的PWD,而不會影響到交互式Shell。然而命令
cd ..;ls -l
則有不同的效果,cd …命令是直接在交互式Shell下執行的,改變交互式Shell的PWD,然而這種方式相當於這樣執行Shell腳本:
source ./test.sh
或者
. ./test.sh
source或者.命令是Shell的內建命令,這種方式也不會創建子Shell,而是直接在交互式Shell下逐行執行腳本中的命令。(source命令不會創建子shell)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章