shebang
這個符號通常在
unix
系統的指令碼中第一行開頭中寫到,它指明了執行這個指令碼檔案的解釋程式。
1.
如果指令碼檔案中沒有「
#!」這一行,那麼他執行時會預設使用當前
shell
去解釋這個指令碼(即
$shell
環境變數)。
2. 如果「#!」之後的解釋程式是乙個可執行檔案,那麼執行這個指令碼是,他就會把檔名及其引數作為引數傳給那個解釋程式去執行。
3. 如果「#!」指定的解釋程式沒有可執行許可權,則會報錯「bad interpreter:permission denied」(拒絕訪問,也就是沒有許可權)。如果「#!」指定的解釋程式不是乙個可執行檔案,那麼指定的解釋程式會被忽略,轉而給當前的shell去執行這個指令碼。
4. 如果「#!」指定的解釋程式不存在,那麼會報錯「bad interpret : no such file ordirectory」,注意:「#!」之後的解釋程式,需要些其絕對路徑(例如:/bin/bash),他是不會自動到$path中尋找直譯器的。
5. 當然,如果你使用的「bash test.sh」這樣的命令來執行指令碼,那麼「#!」這一行將被忽略,直譯器當然是用命令列中顯示式指定的bash。
總結一下:就是說當我們編寫指令碼的時候,「
#!」使用來呼叫
」/bin/bash」
的解釋程式來執行的,如果沒有的話就會使用預設的
shell
去解釋這個指令碼。(「
#!」之後是用來放解釋程式的絕對路徑的)
編寫Shell指令碼
獲取變數的方式 1 echo path 2 echo 3 echo path 引數的提取 引數的個數 n 第n個引數 0 當前指令碼名稱 取出所有引數 shift 引數左移 執行過程 2 編寫指令碼內容 單獨講解 3 新增執行許可權 chmod a x abc.sh 4 當前目錄執行 abc.sh ...
Shell 指令碼編寫
shell 指令碼與 windows dos 下的批處理相似,也就是用各類命令預先放入到乙個檔案中,方便一次性執行的乙個程式檔案,主要是方便管理員進行設定或者管理用的。但是它比 windows 下的批處理更強大,比用其他程式設計程式編輯的程式效率更高,它使用了 linux unix 下的命令。方法一...
shell指令碼編寫
echo echo n不換行輸出,echo e會處理特殊字元,比如有 n則會換行 printf 不自動換行輸出 print 自動換行輸出 傳遞到指令碼的引數個數 以乙個單字串顯示所有向指令碼傳遞的引數。指令碼執行的當前程序id號 後台執行的最後乙個程序的id號 與 相同,但是使用時加引號,並在引號中...