一:什麼是shell,shell的作用
- 解釋執行使用者輸入的命令或程式
- 使用者輸入一條命令,shell就解釋一條
- 鍵盤輸入命令,linux給與相應的方式,稱之為互動式
- shell是一塊包裹著系統核心的殼,處於作業系統的最外層,與使用者直接對話,把使用者的輸入,解釋給作業系統,然後處理操作做系統的輸出結果,輸出到螢幕給使用者看到結果
二:什麼是shell指令碼
- 當命令或者程式語句寫在檔案中,我們執行檔案,讀取其中的程式碼,這個程式檔案稱之為shell指令碼。
- 在shell指令碼里定義多條linux命令以及迴圈控制語句,然後將這些linux命令一次性執行完畢,執行指令碼檔案的方式稱之為非互動式方式
- windows中存在*.bat 批處理指令碼
- linux中常用*。sh指令碼檔案
- shell指令碼規則,在linux系統重,shell指令碼或者稱之為bash shell程式通常都是vim編輯,由linux命令、bash shell指令、邏輯控制語句和註釋資訊組成
三:Shebang
- 計算機程式彙總,shebang指的是出現在文字檔案的第一行前兩個字元#!
- 在unix系統重,程式會分析shebang後面的內容,作為直譯器的質量,例如
- 以!#/bin/sh 開頭的檔案,程式在執行的時候會呼叫/bin/bash,也就是bash直譯器
- 以!#/user/bin/python開頭的檔案,代表制定python直譯器去執行
- 以!#/user/bin/env直譯器名稱,是一種在不同平臺上都能正確找到直譯器的辦法
- 注意事項
- 如果指令碼未指定shebang,指令碼執行的時候,預設用當前shell去解釋接保本,即$shell
- 如果shebang制定了可執行的直譯器,如/bin/bash /usr/bin/python 指令碼在執行時,檔案會作為引數傳遞給直譯器
- 如果#!指定的直譯器程式沒有可執行許可權,則彙報錯"bad interpreter:Permission denied"。
- 如果#!指定的直譯器不是一個可執行檔案,那麼指定的解釋程式會被忽略,轉而交給當前的shell去執行這個指令碼
- 如果#!制定的解釋程式不存在,那麼會報錯:“bad interpreter:No such file or directory”。
- #!之後的解釋程式,需要寫其絕對路徑 如#!/bin/bash 它是不會自動到$PATH中尋找直譯器的。
- 如果你使用 bash test.sh這樣的命令來執行指令碼,那麼#!這一行會被忽略掉,直譯器當然是用命令中顯示制定的bash