Linux - Shell Script

 

開頭 


    #!/bin/bash // 也可改用 #!/bin/sh ,執行起來少部份會有不同結果



判斷式


    -e /dir/fileName // 檔案或目錄是否存在
    -f /dir/fileName // 檔案是否存在
    -d /dir/fileName // 目錄是否存在
    -z string // 判斷字串是否為空,為空回傳 true (-n 可省略)
    -n string // 判斷字串是否有值

    -eq // 兩數值相等
    -ne // 兩數值不相等
    -gt // >
    -lt // <
    -ge // >=
    -le // <=

    -a // and
    -o // or
    ! // 反向

可使用在 test 、 [  ]、while...,比如:

    test -e /dir/fileName
    [ ! -z "string" ]

$1用在判斷式要用「"」框起來,比如:

    [ "$1" = "string" ]



if


    if [ 條件判斷式 ]; then
    內容一
    elif [ 條件判斷式二 ]; then
    內容二
    else
    內容三
    fi



case


    case $變數名稱 in
    "第一個值")
    內容一
    ;;
    "第二個值")
    內容二
    ;;
    *)
    內容三
    exit 1
    ;;
    esac



while


    while [ 條件判斷式 ]
    do
    內容
    done



for


    for var in con1 con2 con3 ...
    do
     內容
    done


    for (( i=1; i<=3; i=i+1 ))
    do
    內容
    done




取指定長度的字串

取第一個字元( 0 代表要顯示的第一個字元 index,1 代表顯示到這為止的字元 index )

    STRING="$1"
    STRING_HEAD=${STRING:0:1}


STRING_HEAD=`printf "%.*s\n" 1 "$STRING"`



判斷輸入參數個數


    if [ "$#" == "0" ]; then
     echo "$0 使用說明"
     exit 0
    fi


使用輸入參數


    $@ // 列出全部參數(會用雙引號框起來) ( $* 也是列出全部參數,但僅用空格分隔)
    ${0} // 列出執行名稱,也可用 $0
    ${1} // 列出第一個參數,也可用 $1
    ${2} // 列出第二個參數,也可用 $2
    ... // 以此類推



其他長度用法


    ${#1} // 第一個參數的字串長度
    $((${#1}-${#2})) // 計算 第一參數字串長度 減 第二參數字串長度



陣列用法


    NAME=() // 陣列宣告
    NAME=('str1' 'str2') // 陣列宣告+定義
    NAME+=('str3') // 增加陣列內容
    NAME+=('str3' 'str4') // 增加兩個陣列內容
    ${#NAME[@]} // 目前陣列長度 or ${#NAME[*]}
    NAME[${#NAME[@]}]="str5" // 修改或增加陣列內容 or NAME[${#NAME[*]}]="str5"
    unset NAME[1] // 刪除陣列第二個元素
    NAME=( ${NAME[@]/str3} ) // 刪除內容為str3的元素 or NAME=( ${NAME[*]/str3} )

    // for 用法 or ${NAME[*]}
    for STR in "${NAME[@]}"; do
        ...
    done



讀取檔案


    while read line ; do
     echo $line
    done < "/path/name.file"


IFS=$'\n' // 把shell的內建分割符號改為換行
for line in `cat /path/name.file`;
do
echo $line;
done
unset IFS // 還原 IFS



其他


    $(命令) // 執行命令
    $(( 數學運算式 )) // 數學計算




沒有留言:

張貼留言