2009-10-20

【程式】Shell Script : Sample Code - 個人備忘

# 一定要使用 root 身分才可以執行 Sync
if [ "$(id -u)" != "0" ]; then
   echo "** Error : You must run the script as root." 1>&2
   exit 1
fi


# if 的用法
if [ $action = 'Stage' ]; then
    webs=$sWebs;
    cmd=$sCmd;
elif [ $action = 'Online' ]; then
    webs=$oWebs;
    cmd=$oCmd;
fi


# echo -n 表是不斷行 , -e 表支援 \n \t 那些東西 ,-E 不支援 \n \t (預設)
# Sample : 輸入 A、F or C ,

echo -n 'Step 2 : Sync All(A)  Folder/File(F) Cancel(C) -- : '
read opt


# case 用法,只要開頭為大小寫的aA fF cC均可
case "$opt" in
    [aA]*)
        echo -e '----> Sync All \n'
        syncOpt='SyncAll'
        ;;
    [fF]*)
        echo -e '----> Sync Folder/File \n'
        funcSetFile # call function funcSetFile
        while funcCheckFile $syncFile; do
            echo -e "** Error : Folder/File not exist. \n" 1>&2
            unset syncFile;
            funcSetFile # call function funcSetFile
        done
        syncOpt='SyncFile'
        ;;
    [cC]*)
        echo 'Bye!! Bye!!'
        ;;
    *)
        echo 'Bye!! Bye!!'
        ;;
esac


# 完全符合 SyncAll 或 SyncFile 字串才行
case "$syncOpt" in
    SyncAll)
        funcSyncAll # call function funcSyncAll
        ;;
    SyncFile)
        funcSyncFile # call function funcSyncFile
        ;;
    *)
        echo '... bye!!'
        ;;
esac


# 檢查 目錄/檔案 是否存在
funcCheckFile(){
    if [ -f $srcFolder/$1 -o -d $srcFolder/$1 ]; then
        return 1;
    else
        return 0;
    fi
}


# 可以使用 func $param 來傳參數。但func的回傳值只能是數值,不可以是字串
syncFile='etc/passwd'
while funcCheckFile $syncFile; do
    echo -e "** Error : Folder/File not exist. \n" 1>&2
    unset syncFile;
    funcSetFile # call function funcSetFile
done


# 取得字串長度:
len=${#str}


# 取得部份字串
# Linux 環境上,使用下面二個方式都可以成功:

substr=`expr substr $str 1 5`
substr=${str:0:5}
# 但 BSD 上,前二個方式我都沒辦法用,最後問了BSD專家 【孟凱】

substr=`echo ${str} | cut -c 1-5`


# 一開始就輸入的參數 ex.. sh script 1 2 3 4 5 6
for param in $@
do
    echo $param
done

0 comments:

張貼留言