shell概念

金朵發表於2024-07-05

一:什麼是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後面的內容,作為直譯器的質量,例如
  1. 以!#/bin/sh 開頭的檔案,程式在執行的時候會呼叫/bin/bash,也就是bash直譯器
  2. 以!#/user/bin/python開頭的檔案,代表制定python直譯器去執行
  3. 以!#/user/bin/env直譯器名稱,是一種在不同平臺上都能正確找到直譯器的辦法
  • 注意事項
  1. 如果指令碼未指定shebang,指令碼執行的時候,預設用當前shell去解釋接保本,即$shell
  2. 如果shebang制定了可執行的直譯器,如/bin/bash /usr/bin/python 指令碼在執行時,檔案會作為引數傳遞給直譯器
  3. 如果#!指定的直譯器程式沒有可執行許可權,則彙報錯"bad interpreter:Permission denied"。
  4. 如果#!指定的直譯器不是一個可執行檔案,那麼指定的解釋程式會被忽略,轉而交給當前的shell去執行這個指令碼
  5. 如果#!制定的解釋程式不存在,那麼會報錯:“bad interpreter:No such file or directory”。
  6. #!之後的解釋程式,需要寫其絕對路徑 如#!/bin/bash 它是不會自動到$PATH中尋找直譯器的。
  7. 如果你使用 bash test.sh這樣的命令來執行指令碼,那麼#!這一行會被忽略掉,直譯器當然是用命令中顯示制定的bash