安裝腳本中的shell基本知識點總結

      網友投稿 858 2022-05-29

      本文講述了在Install.sh腳本中出現的shell相關語法,這可以幫助無shell編程基礎的人員掃清語法障礙,快速理解腳本的意圖。

      1.??????? “#!” 是一個約定的標記,它告訴系統這個腳本需要什么解釋器來執行,即使用哪一種Shell。Shell腳本解釋器的種類有bash、sh、csh、ksh等,bash是Linux標準默認的shell。

      2.??????? main函數為腳本的主函數,腳本執行的入口

      3.??????? if ... fi語句:

      如果[]內的表達式返回true,then后邊的語句將會被執行;如果返回false,不會執行任何語句。最后必須用fi結尾來閉合if。

      4.??????? 命令替換

      $(id -u):$(cmd)的意思是將cmd執行一次,并用標準輸出替換$(cmd)。其等價于`cmd`,即用反引號包含命令,反引號是鍵盤上Esc下面的符號。

      5.??????? 條件測試—整數測試

      if ?[ $(id -u) -ne 0 ]:條件表達式要放在方括號中,并且[]和表達式之間要有空格,否則會有語法錯誤。[為一個shell命令,其語法為:[ expression ]

      方括號也可以用test命令代替,test命令的語法為:test expression

      其中 –ne 為關系運算符,用于檢測兩個數是否相等。

      表1:整數運算符列表

      運算符

      說明

      舉例

      -eq

      檢測兩個數是否相等,相等返回 true。

      [ $a -eq $b ] 返回?true。

      -ne

      檢測兩個數是否相等,不相等返回 true。

      [ $a -ne $b ] 返回 true。

      -gt

      檢測左邊的數是否大于右邊的,如果是,則返回 true。

      [ $a -gt $b ] 返回 false。

      -lt

      檢測左邊的數是否小于右邊的,如果是,則返回 true。

      [ $a -lt $b ] 返回 true。

      -ge

      檢測左邊的數是否大等于右邊的,如果是,則返回 true。

      [ $a -ge $b ] 返回 false。

      -le

      檢測左邊的數是否小于等于右邊的,如果是,則返回 true。

      [ $a -le $b ] 返回 true。

      6.??????? 變量的使用

      ${INS_DEBUG_ERROR}:使用一個定義過的變量,只要在變量名前面加美元符號$即可,變量名外面的花括號是可選的,加不加都行,加花括號是為了幫助解釋器識別變量的邊界。推薦給所有變量加上花括號,這是個好的編程習慣。

      7.??????? 函數定義和調用

      check_input_param是腳本里定義的一個函數,定義函數的一般格式如下:

      function_name () {

      list of commands

      [ return value ]

      }

      函數返回值,可以顯式增加return語句;如果不加,會將最后一條命令運行結果作為返回值。

      Shell 函數返回值只能是整數(0~255),一般用來表示函數執行成功與否,0表示成功,其他值表示失敗。如果 return 其他數據,比如一個字符串,往往會得到錯誤提示:“numeric argument required”。

      如果一定要讓函數返回字符串,那么可以先定義一個變量,用來接收函數的計算結果,腳本在需要的時候訪問這個變量來獲得函數返回值,通過echo語句將數據返回。

      調用函數時只需要給出函數名,不需要加括號。當用戶定義一個函數后,實際上該函數就成為一個合法的shell命令。在Shell中,調用函數時可以向其傳遞參數。在函數體內部,通過 $n 的形式來獲取參數的值,

      8.??????? 特殊變量

      retVal=$?:其中$?為特殊變量(又稱系統變量),此處代表上個函數check_input_param的返回狀態,0代表成功,非0代表失敗。

      安裝腳本中的shell基本知識點總結

      表2:特殊變量列表

      變量

      含義

      $0

      當前腳本的文件名

      $n

      傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。當n>=10時,需要使用${n}來獲取參數。

      $#

      傳遞給腳本或函數的參數個數。

      $*

      傳遞給腳本或函數的所有參數。

      $@

      傳遞給腳本或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。

      $?

      上個命令的退出狀態,或函數的返回值。

      $$

      當前Shell進程ID。對于 Shell 腳本,就是這些腳本所在的進程ID。

      $!

      Shell最后運行的后臺Process的PID

      9.??????? 條件測試—字符串測試

      if中的[ —字母 ]代表的意思:

      [ -z STRING ] “STRING” 的長度為零則為真

      String1 = string2 等于,如:if [ "$a" = "$b" ]

      String1 != sring2 不等于,如:if [ "$a" == "$b" ],與=等價

      [ -d FILE ] 如果FILE存在且是一個目錄則為真。

      10.?? >和>>都是重定向輸出,>會覆蓋已有的文件內容,而>>會附加到已有內容之后。

      1> 指標準信息輸出路徑(也就是默認的輸出方式)

      2> 指錯誤信息輸出路徑

      2>&1 指將標準信息輸出路徑指定為錯誤信息輸出路徑(也就是都輸出在一起)

      如果希望執行某個命令,但又不希望在屏幕上顯示輸出結果,那么可以將輸出重定向到 /dev/null,如果這樣寫command > /dev/null 2>&1,即代表屏蔽 stdout 和 stderr

      11.??? Here Document:目前沒有統一的翻譯,這里暫譯為”嵌入文檔“。Here Document是Shell中的一種特殊的重定向方式,它的基本的形式如下:

      command << delimiter

      document

      delimiter

      它的作用是將兩個delimiter之間的內容(document)作為輸入傳遞給command。結尾的delimiter 一定要頂格寫。

      12.??? 變量作用域

      全局變量:

      在腳本中定義的變量為全局變量,作用域為被定義的地方開始到腳本結束或被顯示地刪除處為止。函數體內部的變量默認也是全局變量,其作用域為“函數被調用時執行變量定義的地方”開始,到shell結束或被顯示刪除處為止。

      局部變量:

      關鍵字為local,如果變量被定義為local,其作用域變為函數體內。另外,函數的參數也是局部變量。

      當局部變量和全部變量同名時,函數內部的局部變量會優先被使用。

      環境變量:一般是指在操作系統中用來指定操作系統運行環境的一些參數,是所有shell程序都可以使用的變量。常用的有PATH、HOME、TMOUT、PWD等等。按照慣例,shell中的環境變量都使用大寫字母表示。

      上圖中PWD就是一個環境變量,用于記錄當前工作目錄。

      export:設置新的環境變量。例如$ export TEST="Test..." #增加一個環境變量TEST

      env:顯示所有環境變量。

      13.??? 引用

      單引號:

      可以說是所見即所得:即將單引號內的內容原樣輸出,或者描述為單引號里面看到的是什么就會輸出什么。

      雙引號:

      把雙引號內的內容輸出出來;如果內容中有命令、變量等,會先把變量、命令解析出結果,然后在輸出最終內容來。

      不加引號:

      如果內容中有命令、變量等,會先把變量、命令解析出結果,然后在輸出最終內容來;如果字符串中帶有空格等特殊字符,則不能完整的輸出,需要改加雙引號。一般連續的字符串,數字,路徑等可以用。

      在echo命令中,雙引號可有可無,單引號主要用于原樣輸出

      軟件開發

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:非IT行業大企程序員講述MIS系統開發案例
      下一篇:一文搞清二進制補碼 丨【奔跑吧!JAVA】
      相關文章
      亚洲综合婷婷久久| 久久精品九九亚洲精品天堂| 久久精品国产96精品亚洲| 亚洲Av无码国产情品久久| 日韩国产欧美亚洲v片| 亚洲中文字幕乱码熟女在线| 亚洲熟妇色自偷自拍另类| 麻豆亚洲av熟女国产一区二| 亚洲欧洲国产精品你懂的| 亚洲邪恶天堂影院在线观看| 亚洲成色999久久网站| 亚洲日本一区二区三区| 亚洲国产精品热久久| 亚洲影院在线观看| 久久久亚洲裙底偷窥综合| 亚洲精品国产福利片| 亚洲国产精品成人综合久久久 | 亚洲精品一卡2卡3卡三卡四卡| 亚洲视频在线一区二区三区| 亚洲视频一区网站| 亚洲国产高清美女在线观看| 亚洲人成网站在线观看播放动漫 | 1区1区3区4区产品亚洲| 亚洲一区二区三区亚瑟| 久久夜色精品国产噜噜亚洲a| 亚洲精品无码av片| 国产偷国产偷亚洲高清人| 亚洲精品无码久久毛片| 在线观看亚洲成人| 亚洲AV无码成人精品区天堂| 久久久久久久亚洲Av无码| 亚洲国产精品免费在线观看| 亚洲日韩乱码中文字幕| 亚洲av日韩av欧v在线天堂| 久久久久亚洲精品中文字幕| 亚洲人成人无码网www电影首页| 亚洲AV第一页国产精品| 亚洲国产日韩在线一区| 亚洲色欲啪啪久久WWW综合网| 人人狠狠综合久久亚洲| 亚洲午夜精品久久久久久浪潮|