Shell語法

Shell字符串
單引號字符串的限制:
    單引號裏的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
    單引號字串中不能出現單引號(對單引號使用轉義符後也不行)。
雙引號的優點:
    雙引號裏可以有變量
    雙引號裏可以出現轉義字符
獲取字符串長度
eg: string="abcd"
    echo ${#string} #輸出 4
提取子字符串
eg: string="alibaba is a great company"
    echo ${string:1:4} #輸出liba
查找子字符串
eg: string="alibaba is a great company"
    echo `expr index "$string" is`

數組
定義數組的一般形式爲:
    array_name=(value1 ... valuen)
讀取數組元素值的一般格式是:
    ${array_name[index]}
eg:    valuen=${array_name[2]}
使用@ 或 * 可以獲取數組中的所有元素,例如:
    ${array_name[*]}
    ${array_name[@]}
獲取數組的長度
獲取數組長度的方法與獲取字符串長度的方法相同,例如:
    # 取得數組元素的個數
    length=${#array_name[@]}
    # 或者
    length=${#array_name[*]}
    # 取得數組單個元素的長度
    lengthn=${#array_name[n]}

 1) if ... else 語句
if ... else 語句的語法:
if [ expression ]
then
   Statement(s) to be executed if expression is true
fi
 2) if ... else ... fi 語句
if ... else ... fi 語句的語法:
if [ expression ]
then
   Statement(s) to be executed if expression is true
else
   Statement(s) to be executed if expression is not true
fi
 3) if ... elif ... fi 語句
if ... elif ... fi 語句可以對多個條件進行判斷,語法爲:
if [ expression 1 ]
then
   Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
   Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
   Statement(s) to be executed if expression 3 is true
else
   Statement(s) to be executed if no expression is true
fi
test 命令用於檢查某個條件是否成立,與方括號([ ])類似。
eg:if [ $a == $b ]
if test $[num1] -eq $[num2]

case ... esac 與其他語言中的 switch ... case 語句類似,是一種多分枝選擇結構。
case 語句匹配一個值或一個模式,如果匹配成功,執行相匹配的命令。case語句格式如下:
case 值 in
模式1)
    command1
    command2
    command3
    ;;
模式2)
    command1
    command2
    command3
    ;;
*)
    command1
    command2
    command3
    ;;
esac

for循環一般格式爲:
for 變量 in 列表
do
    command1
    command2
    ...
    commandN
done

while循環用於不斷執行一系列命令,也用於從輸入文件中讀取數據;命令通常爲測試條件。其格式爲:
while command
do
   Statement(s) to be executed if command is true
done

until 循環執行一系列命令直至條件爲 true 時停止。until 循環與 while 循環在處理方式上剛好相反。一般while循環優於until循環,但在某些時候,也只是極少數情況下,until 循環更加有用。
until 循環格式爲:
until command
do
   Statement(s) to be executed until command is true
done

break命令
break命令允許跳出所有循環(終止執行後面的所有循環)
continue命令
continue命令與break命令類似,只有一點差別,它不會跳出所有循環,僅僅跳出當前循環。

Shell 函數的定義格式如下:
function_name () {
    list of commands
    [ return value ]
}
如果你願意,也可以在函數名前加上關鍵字 function:
function function_name () {
    list of commands
    [ return value ]
}
函數返回值在調用該函數後通過 $? 來獲得。
像刪除變量一樣,刪除函數也可以使用 unset 命令,不過要加上 .f 選項,如下所示:
    $unset .f function_name
如果你希望直接從終端調用函數,可以將函數定義在主目錄下的 .profile 文件,這樣每次登錄後,在命令提示符後面輸入函數名字就可以立即調用。

像其他語言一樣,Shell 也可以包含外部腳本,將外部腳本的內容合併到當前腳本。
Shell 中包含腳本可以使用:
    . filename

    source filename
兩種方式的效果相同,簡單起見,一般使用點號(.),但是注意點號(.)和文件名中間有一空格。
注意:被包含腳本不需要有執行權限。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章