shell腳本執行
對于我們這些小白而講,shell腳本無疑是最令人頭疼的事了,我再這里講一下shell腳本運行要注意的哪些。
shell腳本就好像c++,java代碼一樣,按照從上到下然后從左到右的順序執行。就像我們日常讀書一樣。如果shell命令遇見了子進程(嵌套代碼),程序就會跟著順序進入子進程。當子進程完成后,回到父進程,并且把父進程所需要的參數提交。
shell執行的方式
shell一共有4種執行方式
(1)bash file 或者 sh file 當腳本寫好以后,文件創建時默認是沒有執行的,運行腳本需要執行權限,所以直接運行就不行。要想執行就需要用這種方法。 示例:
當腳本開頭沒有解釋器的時候,這就可以用這種方法來執行。
(2)絕對路徑或者./ file 執行文件再當前目錄下執行,可以直接用./ file去執行這個文件。其中 . 代表的是父目錄,在這表現為相對路徑。如果執行文件不再該目錄下,那就使用絕對路徑。在這種方法執行文件的時候用戶必須附有該執行權限。
chmod +x file
這條命令可以給用戶加上執行權限。然后文件內容頭要有解釋器。
(3)可以用管道或者重定向的方法
sh<file 或者 file|sh
這種方法雖然感覺跟第一種方法一樣,但是好多時候可以用這種方法做到精簡代碼。
(4)source file 或者 . file ,如果腳本里面有嵌套,那么就會生成一個子進程。shell腳本中的各個代碼按順序執行,再執行時會創建一個進程。當語句中嵌套其他的有其他腳本,那么這些語句默認情況下會開啟一個子進程。而用這兩個命令不會打開子進程,它會直接在這個父進程中運行。所以這兩個命令可以將其嵌套程序的變量,返回值直接傳遞到父進程中使用。要注意的是. 后面一定要有空格。
pstree -p 查看進程
為了方便我們查看進程,我們在子腳本中設置休眠時間
sleep 設置休眠時間
用./3.log命令運行后車看子進程
用source 3.log運行的結果
其中4.log是3.log的嵌套函數,由結果圖可以看出,該命令沒有開啟子進程
原創文章,作者:phosphor,如若轉載,請注明出處:http://www.www58058.com/77563