<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
    四、while語句
    ?
    ??? shell中有三種循環語句,分別是while語句、for語句、until語句
    ?
    1、 while語句的格式為:
    ?
    ??? while 測試條件
    ??? do
    ??? 命令表
    ??? done
    ?
    ??? 說明:先執行測試條件,如果為真,則進入循環體執行其中的命令,然后再做條件測試,直到測試條件為假時終止循環。
    ?
    2、舉例1:
    ?
    ??? while [ $1 ]
    ??? do
    ????? if [ -f $1 ]
    ????? then echo "display:$1"
    ?????????? cat $1
    ????? else echo "$1 is not a file name."
    ????? fi
    ????? shift
    ??? done
    ?
    ??? 說明:程序對各個給定的位置參數,首先判斷是否為普通文件,是則先是內容,不是則報錯。每次循環一個位置,用shift移位,直至所有參數比較完成。
    ?
    3、舉例2:
    ?
    ??? echo "Key in file name -> \c"
    ??? read filename
    ??? echo "Key in data:"
    ??? while
    ????? read x
    ??? do
    ????? echo $x >> $filename
    ??? done
    ??? cat $filename
    ?
    ??? 說明:用戶輸入一個數據,就添加到指定的文件中,直到用戶按Enter鍵為止,最后顯示文件內容。
    ?
    ?
    五、until語句
    ?
    1、until語句的格式:
    ?
    ??? until 測試條件
    ??? do
    ????? 命令表
    ??? done
    ?
    ??? 說明:當測試條件為假時,才進入循環體,直至測試條件為真后終止循環。(跟while相反)
    ?
    2、舉例:
    ?
    ??? until [ "$2" = "" ]
    ??? do
    ????? cp $1 $2
    ????? shift 2
    ??? done
    ??? if [ "$1" != "" ]
    ??? then echo "bad argument!"
    ??? fi
    ?
    ??? 說明:如果第二個位置參數不為空,則將文件1復制給文件2,然后位置參數左移兩位,直至沒有第二個參數為止。在推出循環后再判斷第一個參數是否為空,若為空則報錯。
    ?
    ?
    六、for語句
    ?
    ??? for語句是最常用的循環結構語句,有兩種方式:值表方式和算數表達式方式。
    ?
    1、值表方式
    ?
    ??? 格式為:
    ??? for 變量 [ in 值表 ]; do 命令表; done
    ?
    ??? 例如:
    ??? for i in "${person[*]}"; do echo $i; done
    ?
    ??? 或者寫為:
    ??? for 變量 [ in 值表 ]
    ??? do
    ????? 命令名
    ??? done
    ??? 注:值表也可以是正則表達式
    ?
    ??? 示例:
    ??? dir=$1 ; shift
    ??? if [ -d $dir ]
    ??? then
    ????? cd $dir
    ????? for name
    ????? do
    ??????? if [ -f $name ]
    ??????? then cat $name
    ????????? echo "End of ${dir}/$name"
    ??????? else echo "Invalid file name :${dir}/$name"
    ??????? fi
    ????? done
    ??? else echo "Bad directory name :$dir"
    ??? fi
    ?
    ??? 說明:如果第一個位置參數是合法的目錄,則把后面各個位置參數對應的文件顯示出來,若文件名不正確則顯示錯誤信息。不過第一個位置參數不是合法目錄,則先是目錄名不對。
    ?
    2、算數表達式方式
    ?
    ??? 格式為:
    ??? for (( e1;e2;e3 )); do 命令表; done
    ?
    ??? 或者:
    ??? for (( e1;e2;e3 ))
    ??? do
    ????? 命令表
    ??? done
    ?
    ??? 舉例:
    ??? for (( i=1;i<=$1;i++ ))
    ??? do
    ????? for (( j=1;j<=i;j++ ))
    ????? do
    ??????? echo -n "*"
    ????? done
    ????? echo ""
    ??? done
    ??? echo "end!"
    ?
    ?
    七、其他命令
    ?
    1、break命令
    ?
    ??? break命令可以使我們手動控制跳出循環。
    ?
    ??? 其語法是:
    ??? break [n]
    ??? 其中n代表要跳出的循環層數,默認是1。若大于1,則從包含break語句的循環開始往外跳。
    ?
    ??? 舉例:
    ??? count=$#
    ??? cmd=echo
    ??? do
    ????? cmd="$cmd \$$count"
    ????? count=`expr $count -1`
    ????? if [ $count -eq 0 ]
    ????? then break
    ????? fi
    ??? done
    ??? eval $cmd
    ??? 說明:該循環總是為真,唯一的出口是執行break語句。
    ?
    2、continue語句
    ?
    ??? continue語句可以跳過循環體中后面的語句,直接回到本層循環的開頭,進行下一次循環。
    ?
    ??? 其語法是:
    ??? continue [n]
    ??? 其中n表示從包含continue語句的最內層循環開始向外跳的層數。默認值為1。
    ?
    ??? 舉例:
    ??? for i in 1 2 3 4 5
    ??? do
    ????? if [ "$i" -eq 3 ]
    ????? then continue
    ????? else echo "$i"
    ????? fi
    ??? done
    ??? 說明:不打印3。
    ?
    3、exit語句
    ?
    ??? exit語句用于立即退出正在執行的shell腳本。
    ?
    ??? 其語法為:
    ??? exit [n]
    ??? 其中n是設定的退出值。默認為最后一個命令的執行狀態。
    ?
    4、select語句
    ?
    ??? select語句一般用于菜單的設計,它自動完成接受用戶輸入的整個過程,顯示一組菜單項及用戶的選擇。
    ?
    ??? 其語法為:
    ??? select identifier[in word...]
    ??? do
    ????? 命令表
    ??? done
    ?
    ??? 舉例:
    ??? PS3="Choice?"
    ??? select choice in query add delete update list exit
    ??? do
    ????? case "$choice" in
    ????? query) echo "Call query routine"
    ???????????? break;;
    ????? add) echo "Call add routine"
    ?????????? break;;
    ????? delete) echo "Call delete routine"???
    ????????????? break;;
    ????? update) echo "Call update routine"
    ????????????? break;;
    ????? list) echo "Call list routine"
    ??????????? break;;
    ????? exit) echo "Call exit routine"
    ??????????? break;;
    ????? esac
    ??? done
    ??? echo "Your choice is:$choice"
    ?
    ??? 其運行結果為:
    ??? 1)query
    ??? 2)add
    ??? 3)delete
    ??? 4)update
    ??? 5)list
    ??? 6)exit
    ??? Choice? 2(用戶輸入)
    ??? Call add routine
    ??? Your choice is: add
    ?
    ??? 說明:列出1-6個選項菜單,給出提示接受用戶選擇。若in word省略,則默認按位置參數給定值。
    ?
    ?




    -The End-

    posted on 2009-01-12 22:06 decode360-3 閱讀(362) 評論(0)  編輯  收藏 所屬分類: Linux
    主站蜘蛛池模板: 亚洲精品成a人在线观看| 午夜性色一区二区三区免费不卡视频| 免费看大美女大黄大色| 亚洲AV无码乱码麻豆精品国产| 亚洲w码欧洲s码免费| 亚洲成人福利在线观看| 黄色成人网站免费无码av| 亚洲色成人四虎在线观看| 国产片免费福利片永久| 黄色a三级三级三级免费看| 亚洲福利精品一区二区三区| a毛片成人免费全部播放| 亚洲AV成人精品网站在线播放 | 亚洲毛片在线观看| 2021在线永久免费视频| 久久精品国产亚洲AV久| 国产精品视频免费一区二区三区| 色费女人18女人毛片免费视频 | 免费无遮挡无码永久在线观看视频| 99亚洲乱人伦aⅴ精品| 免费a级毛片网站| 成人免费ā片在线观看| 久久亚洲精品成人无码网站| 毛片a级毛片免费观看免下载| 国产亚洲精品精品精品| 亚洲精品无码乱码成人| 久久www免费人成看片| AV激情亚洲男人的天堂国语| 亚洲日韩精品无码专区网址| 亚洲视频免费在线看| 性色av极品无码专区亚洲| 久久久精品国产亚洲成人满18免费网站| 中文字幕乱理片免费完整的| 亚洲成a人片77777群色| 免费国产美女爽到喷出水来视频| 日本免费久久久久久久网站| 亚洲国产成人精品无码区二本| 亚洲人成中文字幕在线观看| 无码国产精品一区二区免费虚拟VR | 国产精品亚洲av色欲三区| 精品国产综合成人亚洲区|