歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> shell script 學習筆記-----命令執行

shell script 學習筆記-----命令執行

日期:2017/3/1 12:21:59   编辑:SHELL編程
1、PATH變量:shell最主要的功能就是執行用戶輸入的命令,例如當用戶輸入一條“ls”命令之後,shell就要找到該命令對應的文件並執行。通常shell都會設置一個名叫PATH的環境變量,其中保存著一系列用於查找命令文件的目錄名,並且目錄出現的順序非常重要,因為shell會按序進行查找,當找到第一個與命令對應的文件就執行 2、通常可根據“$?”的值來判斷上一條命令是否運行成功。一般$?=0則說明上一條命令運行成功,否則表示不成功。如果熟悉C語言的話就會知道,其實$?保存的就是上一個程序main函數的返回值。需要注意的是$?僅保存直接相鄰的上一條命令的地址,下圖第二個$?的值變為0是因為上一條"echo $?"命令成功執行了。通常會用$?作為腳本裡面if判斷語句的條件,根據上條指令的執行情況,做出不同的分支 3、後台運行命令:如下圖所示,在執行的指令後添加符號'&',就能讓該指令在後台執行。其中第二行,中括號裡的數字表示在當前shell的後台中運行的進程編號,第二個數字則為系統進程號。所謂後台運行的本質是shell不需要等待當前的命令執行完畢即可接受新的命令執行,但是後台進程的輸出依舊會顯示在屏幕上。tips:1)如果例如想要殺死下圖所示後台進程,可以使用kill %1或者kill 3526兩種方式。2)如果想讓重新用shell控制後台進程,則使用例如命令fg %1這樣的方式即可。3)如果想讓當前在運行的命令轉為後台運行,則可以先用ctrl Z使該命令停止,然後輸入bg使其在後台運行 4、在shell中邏輯運算的判斷方式與C語言中大致相同。例如符號“&&”表示邏輯與,執行語句A&&B,當且僅當A運行成功才會運行B。對於邏輯或同理可得,語句A || B,當且僅當A運行失敗才會運行B。 5、當執行了命令“set -e”後,之後的語句如有執行失敗的,則退出整個腳本的運行,例如下圖所示,如果當前目錄不存在mytmp目錄時,cd語句執行完就自動退出腳本了,並不會運行ls語句 6、通常即使在後台運行的進程也是shell的子進程,因此,當退出shell時,它就會給它的子進程發送一個SIGHUP的信號來殺死它。如果想要在後台運行的進程不隨著shell的結束而結束,就要在輸入命令的前面加上nohup,如下圖所示。由此shell的子進程就會忽略發來的SIGHUP信號,脫離shell單獨運行。(據說shell關閉之後就會自動在當前目錄下生成一個nohup.out文件用於保存子進程的輸入,實驗之後發現該文件確實存在,不過並沒有內容。) 下圖為shell關閉之前和之後,bg進程的運行狀態

Copyright © Linux教程網 All Rights Reserved