Shell編程——bash基礎知識

來源:互聯網
上載者:User

標籤:

建立指令碼:vim test.sh
    指令碼內容:#! /bin/bash  #"#!"是一個約定標記,告訴系統用哪種shell來執行
              echo "Hello world!"
使指令碼具有執行許可權:chmod  +x ./test.sh
執行指令碼:./test.sh     #注意,一定要寫成./test.sh,而不是test.sh。若直接寫成test.sh,linux會去PATH裡面找尋有沒有test.sh.

[shell注釋]:以“#”開頭的行為注釋,shell沒有多行注釋
[輸入輸出命令]
    echo命令:echo $variablename #從stdout輸出變數值variablename
             echo -e "\n"   #-e選項是用來啟用逸出字元,此處啟用分行符號\n
    printf命令:printf format-string [arguments...]
        format-string:s% d%
        arguments使用空格分割,不用逗號
        printf不會像echo那樣自動換行,必須顯示添加分行符號(\n)
        參數多于格式控制符(%)時,format-string可以重用,可以將所有參數都轉
    read命令:read name  #從stdin擷取輸入並賦值給變數name
[shell變數]
    定義:variablename="value"  #變數名和等號之間不能有空格
    使用:$variablename   #使用一個定義過的變數,只要在變數名前面加$符號
    重新定義:variablename="newvalue"  #直接覆蓋就行
    唯讀變數:variablename="value"
              readonly variablename  #用readonly命令可將變數定義為唯讀變數,不可修改
    刪除變數:unset variablename     #unset命令不能刪除唯讀變數
    變數類型:局部變數,環境變數,shell變數

[Shell特殊變數]
    $0     當前指令碼的檔案名稱
    $n     傳遞給指令碼或函數的參數。n是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。
    $#     傳遞給指令碼或函數的參數個數。
    $*     傳遞給指令碼或函數的所有參數。
    [email protected]     傳遞給指令碼或函數的所有參數。被雙引號(" ")包含時,與 $*稍有不同,下面將會講到。
    $?    上個命令的退出狀態,或函數的傳回值,0表示成功,其他值表示失敗。
    $$     當前Shell進程ID。對於 Shell指令碼,就是這些指令碼所在的進程ID。

[命令替換]`command`  #``是反引號,位於ESC建下方,不是單引號
[變數替換]
    ${var}:變數本來的值
    ${var:-word}:如果變數 var 為空白或已被刪除(unset),那麼返回word,但不改變 var 的值。
    ${var:=word}:如果變數 var 為空白或已被刪除(unset),那麼返回word,並將 var 的值設定為 word。
    ${var:?message}:如果變數 var為空白或已被刪除(unset),那麼將訊息 message送到標準錯誤輸出,可以用來檢測變數 var 是否可以被正常賦值。若此替換出現在Shell指令碼中,那麼指令碼將停止運行。
    ${var:+word}:如果變數 var 被定義,那麼返回 word,但不改變var的值。

[Shell運算子]
    原生bash不支援簡單的數學運算,但是可以通過其他命令來實現,例如
    awk 和 expr,expr 最常用。如:val=`expr 2 + 2`
    注意:
        1.運算式和運算子之間要有空格,例如 2+2是不對的,必須寫成2 + 2。
        2.完整的運算式要被` `包含,這個字元不是單引號,在Esc鍵下邊。
[算術運算]:+,-,×,/,%,=,==,!=
    注意:
        1.乘號(*)前邊必須加反斜線(\)才能實現乘法運算;
        2.條件運算式要放在方括弧之間,並且要有空格,例如if[$a==$b]
        是錯誤的,必須寫成 if [ $a == $b ]。
[關係運算]:-eq,-ne,-gt,-lt,-ge,-le
    關係運算子只支援數字,不支援字串,除非字串的值是數字。
[布爾運算]:非!,或-o,與-a
[字串運算]:=,!=,-z(長度為0為true),-n(長度不為0為true),str(非空為true)
[檔案測試運算]

[Shell字串]
    字串可以用單引號,雙引號,也可以不用引號。
單引號:
    單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的;
    單引號字串中不能出現單引號(對單引號使用轉義符後也不行)。
雙引號:
    雙引號裡可以有變數,可以出現逸出字元
擷取字串長度:${#string}
提取子字串:${string:1:4}  #輸出下標為1到4的字串,包括1和4,字元下標從0開始
尋找子字串下標:echo `expr index "$string" sub_string`

[Shell數組]
    bash支援一維數組(不支援多維陣列),並且沒有限定數組的大小。數組元素的下標由0開始編號,擷取數組中的元素要利用下標,下標可以是整數或算術運算式,其值應大於等於0.
定義數組:
    在Shell中,用括弧來表示數組,數組元素用“空格”符號分割開。定義數組的一般形式為:  array_name=(value1 ... valuen)
讀取數組元素: ${array_name[index]}
使用@或×來讀取數組所有元素:    ${array_name[*]}  或  ${array_name[@]}
擷取數組的長度:
    # 取得數組元素的個數
    length=${#array_name[@]} 或 length=${#array_name[*]}
    # 取得數組單個元素的長度
    lengthn=${#array_name[n]}

Shell編程——bash基礎知識

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.