Shell編程基礎(一)

  1. Shell腳本的第一行“#!”(Shebang)

    腳本中的#!行(第一行)用於指示一個解釋程序。

    #!行的語法格式類似如下所示:

    #! INTERPRETER [option] ...

    注意:INTERPRETER必須是一個程序的絕對路徑。

  2. Shell中的註釋

    “#”是註釋標識符。

    Bash的HERE DOCUMENT特性,添加多行的註釋內容。

    <<COMMENT

     comment line 1

     comment line 2

     comment line n

    COMMENT

  3. 如何設置腳本的權限和執行腳本

    chmod u+x file

  4. Shell變量進階

    $PARAMETER

    ${PARAMETER}

    位置參數 $9之後,${10}

    注意:參數名是大小寫敏感

    間接參數擴展:

    ${!PARAMETER} 用參數值做參數名。

    大小寫修改(Bash 4.0的新特性)

    ${PARAMETER^} 第一個字母大寫

    ${PARAMETER^^} 全部大寫

    ${PARAMETER,} 第一個字母小寫

    ${PARAMETER,,} 全部小寫

    ${PARAMETER~} 首字母改變大小寫

    ${PARAMETER~~}全部變換大小寫

    注意:大小寫修改的參數擴展是Bash4.0的新特性,之前的Bash版本中無此參數擴展功能。

    變量名擴展:

    ${!PREFIX*}

    ${!PREFIX@}

    這種參數擴展將列出以字符串PREFIX開頭的所有變量名。默認情況下,列出的這些變量名用空格分隔。

    字符串移除:

    ${PARAMETER#PATTERN} 從開始移除,最短匹配

    ${PARAMETER##PATTERN} 從開始移除,最長匹配

    ${PARAMETER%PATTERN} 從結尾開始移除,最短匹配

    ${PARAMETER%%PATTERN} 從結尾開始移除,最長匹配

    字符串搜索與替換:

    ${PARAMETER/PATTERN/STRING} 替換一個匹配

    ${PARAMETER//PATTERN/STRING} 替換所有匹配

    ${PARAMETER/PATTERN} 沒有指定替換,將刪除第一個匹配

    ${PARAMETER//PATTERN} 沒有指定替換,搜友匹配將被刪除

    字符串長度:

    ${#PARAMETER}

    子字符串擴展:

    ${PARAMETER:OFFSET}

    ${PARAMETER:OFFSET:LENGTH}

    使用默認值:

    ${PARAMETER:-WORD}

    ${PARAMETER-WORD}

    指定默認值:

    ${PARAMETER:=WORD}

    ${PARAMETER=WORD}

    使用替代值:

    ${PARAMETER:+WORD}

    ${PARAMETER+WORD}


  5. Bash 的內部變量

    $BASH 變量-用於引用Bash實例的全路徑名。

    $HOME 當前用戶的家目錄

    $IFS 內部字段分隔符

    $OSTYPE 操作系統的類型

    $SECONDS 腳本已運行的秒數

    $TMOUT 超時

    $UID 當前賬戶id

  6. Bash中的位置參數和特殊參數

    位置參數N可以被引用爲${N}

    Bash對一些參數的處理比較特殊。這些參數只能被引用,但不能修改它們的值。這些參數分別是

    *、@、#、?、-、$、!、0和_。

    *:擴展從1開始的所有位置參數。如果擴展發生在雙引號內,即"$*",則擴展爲包含每個參數值的單詞,每個參數值用特殊變量IFS的第一個字符分隔。

    @:也將擴展從1開始的所有位置參數。但當它的擴展發生在雙引號內時,每個參數都擴展爲分隔的單詞。

    #:將擴展爲位置參數的個數,用十進制表示

    ?:上一命令執行的狀態

    $:將擴展爲當前shell的進程號

    !:擴展爲最近一次執行的後臺命令的進程號

    0:將擴展爲Shell或Shell腳本的名稱。

    _:在shell啓動時,它被設爲開始運行的Shell或Shell腳本的路徑。隨後擴展爲前一個命令的最後一個參數。

  7. 使用declare指定變量的類型

    declare命令是Bash的內部命令,用於聲明變量和修改變量的屬性。它與bash的另一個內部命令typeset的用法和用途完全相同。

    直接使用declare命令,不指定變量名,將顯示所有變量的值。

    -r:declare將變量定義爲只讀變量,不能被清除和再賦值

    -i:定義爲整型變量

    -x:declare命令將把指定的變量通過環境輸出到後續命令

    -p:顯示變量的屬性和類型

    如果不知道某程序執行多長時間,把命令放在後臺執行可以使用nohup

    nohup COMMOND [ARG]... &

  8. Bash中的數組變量

    間接聲明數組

    ARRAYNAME[INDEX]=value

    顯示聲明一個數組變量是使用Bash的內部命令declare

    declare -a ARRAYNAME

    declare -a linux=('Debian' 'Redhat' 'Suse' 'Fedora')

    ARRAYNAME=(value1 value2 ... valueN)

    若要引用數組中某一項的內容,必須要使用花括號{},如果索引編號是“@”或"*",那麼數組的所有成員都將被引用.

    echo ${linux[@]}

    arr1=(one two three)

    echo ${arr1[0]} ${arr1[1]} ${arr1[2]}

    echo ${arr1[*]}

    如果引用時,不指定索引編號,則引用的將是數組中的第一個元素。

    使用unset可以消除一個數組或數組的成員變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章