這算是我第一隻 Shell Script 吧。
但也只是簡單的將程式 Sync 到別台 Server 而以。
內容如下:
#!/bin/sh src_folder="/root/www_src" des_folder="/home/www" o_webs="1 2 3 4 5" o_cmd='rsync -rltvp -e "ssh -l root" --exclude ".svn"' s_webs="9" s_cmd='rsync -rltv -e "ssh -l root" --exclude ".svn"' sync_action(){ if [ $action = 'Stage' ]; then webs=$s_webs; cmd=$s_cmd; elif [ $action = 'Online' ]; then webs=$o_webs; cmd=$o_cmd; fi echo -n "** Sync to $action? [Y/N] ** : " read yes_no case "$yes_no" in [yY]*) echo "Sync to ${action}, Start ......" echo '----------------------------------------' for web in $webs do echo "Sync to www-${web}" echo '>>>>>>>>>>>>>>>>>>>>' eval $cmd ${src_folder}/www/ www-${web}:${des_folder}/www/ done ;; [nN]*) echo "Sync to ${action}, Cancel ......" ;; *) echo 'You should Answer Y/N' echo 'bye~~' ;; esac } # 必須要為 root 才可以使用 if [ "$(id -u)" != "0" ]; then echo "You must run the script as root." 1>&2 exit 1 fi # 主程式 echo -n 'Sync to -- Stage(S) Online(O) Cancel(C) -- : ' read action case "$action" in [sS]*) action='Stage'; echo '========== STAGE ==========' sync_action ;; [oO]*) action='Online'; echo '========== online ==========' sync_action ;; [cC]*) echo 'bye!!' ;; *) echo '... bye!!' ;; esac exit 0
PS.
一般來說應該直接$cmd bala bala 就好了,為什麼前面還要用 eval 哩,因為在$cmd裡面有【"】如果直接執行會出現錯誤訊息" Missing trailing-" in remote-shell command. "
0 comments:
張貼留言