<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)-1
    ?
    ??? 開(kāi)始進(jìn)入變成的實(shí)質(zhì)性部分——語(yǔ)句結(jié)構(gòu)。其中的if語(yǔ)句的復(fù)雜度超過(guò)了我的想象,特別是那幾個(gè)不同的種類,需要好好研究研究。
    ?
    ?
    一、if語(yǔ)句
    ?
    1、 測(cè)試語(yǔ)句條件
    ?
    ??? if 測(cè)試語(yǔ)句
    ??? then 命令1
    ??? else 命令2
    ??? fi
    ?
    ??? 舉例:
    ??? if test -f "$1"
    ??? then pr $1
    ??? elif test -d "$1"
    ??? then (cd $1 ; pr *)
    ??? else echo "$1 is neither a file nor a directory."
    ??? fi
    ??? 說(shuō)明:如果$1是一個(gè)普通文件名,則打印其內(nèi)容,如果$1是一個(gè)文件夾地址,則打印其下所有文件的內(nèi)容,如果均不是,則顯示錯(cuò)誤信息。
    ?
    2、命令語(yǔ)句條件
    ?
    ??? 通常if語(yǔ)句都用test命令測(cè)試,但是也可以利用一般命令執(zhí)行成功與否來(lái)做判斷。
    ??? 如果執(zhí)行成功,則返回0,if條件為真;否則為假。
    ?
    ??? if 命令表1
    ??? then 命令表2
    ??? else 命令表3
    ??? fi
    ?
    ??? 舉例:
    ??? if
    ????? grep $user /etc/passwd > /tmp/null
    ????? who | grep $user
    ??? then
    ????? echo "$user has logged in the system."
    ????? cp /tmp/null tmp1
    ????? rm /tmp/null
    ??? else
    ????? echo "$user has not logged in the system."
    ??? fi
    ??? 說(shuō)明:如果輸入用戶已經(jīng)注冊(cè),則將信息寫入tmp1中,若未注冊(cè)則返回錯(cuò)誤信息。
    ?
    ?
    二、條件測(cè)試
    ?
    ??? 條件測(cè)試有3中形式:
    ?
    ??? ① 用test命令 --test -f "$1"
    ??? ② 用[]括起來(lái)([]里面必須要有空格) --[ -f "$1"]
    ??? ③ 用[[條件表達(dá)式]]的格式
    ?
    ??? test命令可以和多種系統(tǒng)運(yùn)算符一起使用,主要包括以下幾類:
    ?
    1、文件類測(cè)試
    ?
    ??? ① -r 文件名:文件存在且可讀,則返回true
    ??? ② -w 文件名:文件存在且可寫,則返回true
    ??? ③ -x 文件名:文件存在且可執(zhí)行,則返回true
    ??? ④ -f 文件名:文件存在且為普通文件,則返回true
    ??? ⑤ -d 文件名:文件存在且為目錄文件,則返回true
    ??? ⑥ -p 文件名:文件存在且為命名的FIFO文件,則返回true
    ??? ⑦ -b 文件名:文件存在且是塊設(shè)備文件,則返回true
    ??? ⑧ -c 文件名:文件存在且是字符設(shè)備文件,則返回true
    ??? ⑨ -s 文件名:文件存在且長(zhǎng)度大于0,則返回true
    ??? ⑩ -t 描述字:若文件被打開(kāi)且描述字與終端設(shè)備相關(guān),則返回true(默認(rèn)描述字為1)
    ?
    2、字符串測(cè)試
    ?
    ??? ① -z s1:若字符串s1長(zhǎng)度為0,則返回true
    ??? ② -n s1:若字符串s1長(zhǎng)度大于0,則返回true
    ??? ③ s1:若字符串s1存在且部位空,則返回true
    ??? ④ s1 = s2:若s1、s2相等,則返回true(“=”可以用“==”代替,“=”前后必須有空格)
    ??? ⑤ s1 != s2:若s1、s2不相等,則返回true
    ??? ⑥ s1 < s2:若按字典順序s1在s2之前,則返回true
    ??? ⑦ s1 > s2:若按字典順序s1在s2之畫后,則返回true

    3、數(shù)值測(cè)試
    ?
    ??? ① n1 -eq n2:若n1等于n2,則返回true
    ??? ② n1 -ne n2:若n1不等于n2,則返回true
    ??? ③ n1 -lt n2:若n1小于n2,則返回true
    ??? ④ n1 -le n2:若n1小于等于n2,則返回true
    ??? ⑤ n1 -gt n2:若n1大于n2,則返回true
    ??? ⑥ n1 -ge n2:若n1大于等于n2,則返回true

    4、邏輯運(yùn)算符
    ?
    ??? 邏輯運(yùn)算符是用于將以上測(cè)試語(yǔ)句組合起來(lái)的符號(hào)
    ?
    ??? ① !:邏輯非,放在表達(dá)式的最前面,使表達(dá)式最終結(jié)果相反。
    ??? ② -a:邏輯與,放在兩個(gè)表達(dá)式之間 &&
    ??? ③ -o:邏輯或,放在兩個(gè)表達(dá)式之間 ||
    ??? ④ ():用于劃分邏輯運(yùn)算
    ??? 舉例:
    ??? [ ! -r $1 ]
    ??? !test -r "$1"
    ??? [ -f "$myfile" -a -r "$myfile" ]
    ??? [ "$a" -ge 0 -o "$b" -le 100 ]
    ??? [ \( "$a" -ge 0 -o "$b" -le 100 \) -a "$c" -eq 10 ]
    ?
    ??? 優(yōu)先級(jí):
    ??? 表達(dá)式 > () > ! > -a > -o
    ?
    5、特殊條件測(cè)試
    ?
    ??? ① “:”:表示不做任何事情,退出值為0
    ??? ② true:表示總為真,退出值為0
    ??? ③ false:表示總為假,退出值為255
    ?
    ??? 舉例:
    ?
    ??? echo "Enter two numbers"
    ??? read x y
    ??? ((z=x+y))
    ??? if [[ z -gt 10 ]]
    ??? then
    ????? echo "x+y>10"
    ??? fi
    ??? ((x*=y))
    ??? ((z%=5))
    ??? if [[ x -le 100 || z -ne 0 ]]
    ??? then
    ????? echo "x*y<=100 or (x+y)%5!=0"
    ??? fi
    ??? echo "Your current directory is `pwd`"
    ??? echo "Enter a file name ->\c"
    ??? read name
    ??? if [[ -r $name && -f $name ]]
    ??? then
    ????? cat $name
    ??? elif [[ -d $name && -x $name ]]
    ??? then
    ????? cd $name
    ????? ls -l | wc -l
    ??? else
    ??? echo "Bad file name!"
    ??? fi
    ?
    ?
    三、case語(yǔ)句
    ?
    ??? 語(yǔ)法格式為:
    ?
    ??? case 字符串 in????
    ??? s1) 命令??????????
    ??????? ...???????????
    ??????? 命令;;????????
    ??? s2) 命令??????????
    ??????? ...???????????
    ??????? 命令;;????????
    ??? s3) 命令??????????
    ??????? ...???????????
    ??????? 命令;;????????
    ??? esac??????????????
    ?
    ??? 舉例如下:
    ?
    ??? echo "Please chose either a,b or c"
    ??? echo "[a] print a file"
    ??? echo "[b] delete a file"
    ??? echo "[c] quit"
    ??? read response
    ??? case $response in
    ??? a) lp myfile;;
    ??? b) rm myfile;;
    ??? c) echo "Good bye";;
    ??? esac
    ?
    ??? 注意事項(xiàng):
    ?
    ??? ① 一個(gè)case可以跟多條命令,最后一個(gè)命令必須以“;;”結(jié)尾
    ??? ② 模式字符串可以使用通配符,例如“*)”
    ??? ③ 如果幾個(gè)case相同處理,則用“|”隔開(kāi),表示“或”的意思
    ??? ④ 各個(gè)case之間不能重復(fù),且需要考慮先后位置
    ??? ⑤ 以case關(guān)鍵字開(kāi)頭,以esac關(guān)鍵字結(jié)尾
    ??? ⑥ case的退出值是最后一個(gè)命令執(zhí)行的退出值,如未執(zhí)行任何命令,則退出值為0
    ?
    ?
    posted on 2009-01-11 21:35 decode360 閱讀(156) 評(píng)論(0)  編輯  收藏 所屬分類: 03.Linux
    主站蜘蛛池模板: 中文字幕亚洲码在线| 亚洲AV电影院在线观看| 亚洲冬月枫中文字幕在线看 | 亚洲天堂电影在线观看| 国产一级淫片a免费播放口| 国产亚洲无线码一区二区| 中文字幕无码一区二区免费| 国产亚洲大尺度无码无码专线 | 夫妻免费无码V看片| 亚洲乱码中文字幕在线| 亚洲AV日韩精品一区二区三区| 一边摸一边桶一边脱免费视频 | 亚洲AV无码久久精品狠狠爱浪潮| 在线免费观看h片| 亚洲av成人无码久久精品| 无码专区AAAAAA免费视频| 亚洲国产精品网站久久| 无人在线观看完整免费版视频| 亚洲中文字幕一二三四区苍井空| 女人与禽交视频免费看| 美女黄色毛片免费看| 国产综合精品久久亚洲| 在线涩涩免费观看国产精品| 久久久久亚洲av无码专区喷水| av无码免费一区二区三区| 久久久久久亚洲av无码蜜芽| 亚洲国产综合无码一区二区二三区| 国内精品免费久久影院| 亚洲黄色在线视频| 暖暖在线日本免费中文| a高清免费毛片久久| 亚洲国产成+人+综合| www国产亚洲精品久久久日本| 国产在线播放线91免费| 亚洲欧洲日本精品| 四虎永久免费网站免费观看| 国产啪精品视频网站免费尤物| 亚洲国产精品综合久久网各| 国产网站免费观看| 国产成人AV免费观看| 亚洲欧美日韩中文字幕一区二区三区 |