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

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

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

    Decode360's Blog

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

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評(píng)論 :: 0 Trackbacks
    Linux shell程序設(shè)計(jì)(七).控制結(jié)構(gòu)-2
    ?
    ??? 繼續(xù)結(jié)構(gòu)控制部分,今天學(xué)習(xí)一下while、for循環(huán),和其他的一些操作。
    ?
    ?
    四、while語(yǔ)句
    ?
    ??? shell中有三種循環(huán)語(yǔ)句,分別是while語(yǔ)句、for語(yǔ)句、until語(yǔ)句
    ?
    1、 while語(yǔ)句的格式為:
    ?
    ??? while 測(cè)試條件
    ??? do
    ??? 命令表
    ??? done
    ?
    ??? 說(shuō)明:先執(zhí)行測(cè)試條件,如果為真,則進(jìn)入循環(huán)體執(zhí)行其中的命令,然后再做條件測(cè)試,直到測(cè)試條件為假時(shí)終止循環(huán)。
    ?
    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
    ?
    ??? 說(shuō)明:程序?qū)Ω鱾€(gè)給定的位置參數(shù),首先判斷是否為普通文件,是則先是內(nèi)容,不是則報(bào)錯(cuò)。每次循環(huán)一個(gè)位置,用shift移位,直至所有參數(shù)比較完成。
    ?
    3、舉例2:
    ?
    ??? echo "Key in file name -> \c"
    ??? read filename
    ??? echo "Key in data:"
    ??? while
    ????? read x
    ??? do
    ????? echo $x >> $filename
    ??? done
    ??? cat $filename
    ?
    ??? 說(shuō)明:用戶輸入一個(gè)數(shù)據(jù),就添加到指定的文件中,直到用戶按Enter鍵為止,最后顯示文件內(nèi)容。
    ?
    ?
    五、until語(yǔ)句
    ?
    1、until語(yǔ)句的格式:
    ?
    ??? until 測(cè)試條件
    ??? do
    ????? 命令表
    ??? done
    ?
    ??? 說(shuō)明:當(dāng)測(cè)試條件為假時(shí),才進(jìn)入循環(huán)體,直至測(cè)試條件為真后終止循環(huán)。(跟while相反)
    ?
    2、舉例:
    ?
    ??? until [ "$2" = "" ]
    ??? do
    ????? cp $1 $2
    ????? shift 2
    ??? done
    ??? if [ "$1" != "" ]
    ??? then echo "bad argument!"
    ??? fi
    ?
    ??? 說(shuō)明:如果第二個(gè)位置參數(shù)不為空,則將文件1復(fù)制給文件2,然后位置參數(shù)左移兩位,直至沒(méi)有第二個(gè)參數(shù)為止。在推出循環(huán)后再判斷第一個(gè)參數(shù)是否為空,若為空則報(bào)錯(cuò)。
    ?
    ?
    六、for語(yǔ)句
    ?
    ??? for語(yǔ)句是最常用的循環(huán)結(jié)構(gòu)語(yǔ)句,有兩種方式:值表方式和算數(shù)表達(dá)式方式。
    ?
    1、值表方式
    ?
    ??? 格式為:
    ??? for 變量 [ in 值表 ]; do 命令表; done
    ?
    ??? 例如:
    ??? for i in "${person[*]}"; do echo $i; done
    ?
    ??? 或者寫(xiě)為:
    ??? for 變量 [ in 值表 ]
    ??? do
    ????? 命令名
    ??? done
    ??? 注:值表也可以是正則表達(dá)式
    ?
    ??? 示例:
    ??? 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
    ?
    ??? 說(shuō)明:如果第一個(gè)位置參數(shù)是合法的目錄,則把后面各個(gè)位置參數(shù)對(duì)應(yīng)的文件顯示出來(lái),若文件名不正確則顯示錯(cuò)誤信息。不過(guò)第一個(gè)位置參數(shù)不是合法目錄,則先是目錄名不對(duì)。
    ?
    2、算數(shù)表達(dá)式方式
    ?
    ??? 格式為:
    ??? 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命令可以使我們手動(dòng)控制跳出循環(huán)。
    ?
    ??? 其語(yǔ)法是:
    ??? break [n]
    ??? 其中n代表要跳出的循環(huán)層數(shù),默認(rèn)是1。若大于1,則從包含break語(yǔ)句的循環(huán)開(kāi)始往外跳。
    ?
    ??? 舉例:
    ??? count=$#
    ??? cmd=echo
    ??? do
    ????? cmd="$cmd \$$count"
    ????? count=`expr $count -1`
    ????? if [ $count -eq 0 ]
    ????? then break
    ????? fi
    ??? done
    ??? eval $cmd
    ??? 說(shuō)明:該循環(huán)總是為真,唯一的出口是執(zhí)行break語(yǔ)句。
    ?
    2、continue語(yǔ)句
    ?
    ??? continue語(yǔ)句可以跳過(guò)循環(huán)體中后面的語(yǔ)句,直接回到本層循環(huán)的開(kāi)頭,進(jìn)行下一次循環(huán)。
    ?
    ??? 其語(yǔ)法是:
    ??? continue [n]
    ??? 其中n表示從包含continue語(yǔ)句的最內(nèi)層循環(huán)開(kāi)始向外跳的層數(shù)。默認(rèn)值為1。
    ?
    ??? 舉例:
    ??? for i in 1 2 3 4 5
    ??? do
    ????? if [ "$i" -eq 3 ]
    ????? then continue
    ????? else echo "$i"
    ????? fi
    ??? done
    ??? 說(shuō)明:不打印3。
    ?
    3、exit語(yǔ)句
    ?
    ??? exit語(yǔ)句用于立即退出正在執(zhí)行的shell腳本。
    ?
    ??? 其語(yǔ)法為:
    ??? exit [n]
    ??? 其中n是設(shè)定的退出值。默認(rèn)為最后一個(gè)命令的執(zhí)行狀態(tài)。
    ?
    4、select語(yǔ)句
    ?
    ??? select語(yǔ)句一般用于菜單的設(shè)計(jì),它自動(dòng)完成接受用戶輸入的整個(gè)過(guò)程,顯示一組菜單項(xiàng)及用戶的選擇。
    ?
    ??? 其語(yǔ)法為:
    ??? 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"
    ?
    ??? 其運(yùn)行結(jié)果為:
    ??? 1)query
    ??? 2)add
    ??? 3)delete
    ??? 4)update
    ??? 5)list
    ??? 6)exit
    ??? Choice? 2(用戶輸入)
    ??? Call add routine
    ??? Your choice is: add
    ?
    ??? 說(shuō)明:列出1-6個(gè)選項(xiàng)菜單,給出提示接受用戶選擇。若in word省略,則默認(rèn)按位置參數(shù)給定值。
    ?
    ?
    posted on 2009-01-12 22:06 decode360 閱讀(127) 評(píng)論(0)  編輯  收藏 所屬分類: 03.Linux
    主站蜘蛛池模板: 亚洲高清专区日韩精品| 韩国二级毛片免费播放| 免费网站观看WWW在线观看| 一边摸一边爽一边叫床免费视频 | 最近的中文字幕大全免费版| 免费观看美女用震蛋喷水的视频| 中文字幕视频免费| 日韩免费无码视频一区二区三区| 暖暖在线视频免费视频| 国产婷婷成人久久Av免费高清| 久久久久免费视频| 成人无码WWW免费视频| 高清一区二区三区免费视频| 男人进去女人爽免费视频国产| 97公开免费视频| 国产人成免费视频网站| 亚洲免费观看在线视频| 福利免费观看午夜体检区| 欧美大尺寸SUV免费| 香蕉视频在线观看免费国产婷婷| 国产精品jizz在线观看免费| 亚洲国产人成精品| 在线亚洲午夜理论AV大片| 日本亚洲视频在线| 亚洲成a人片在线观看中文!!!| 色在线亚洲视频www| 亚洲爆乳成av人在线视菜奈实| 美女尿口扒开图片免费| a级毛片高清免费视频| 69国产精品视频免费| 午夜视频免费观看| 亚洲中文字幕无码专区| 亚洲AV无码精品色午夜在线观看| 久久久国产精品亚洲一区| 亚洲一区中文字幕| 黄网站色视频免费看无下截| jizz免费在线影视观看网站| 久久久久久久99精品免费| 一个人看www在线高清免费看 | 99国产精品视频免费观看| 老司机在线免费视频|