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

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

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

    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    條件控制(test,expr……)

    Posted on 2009-11-29 12:01 Gavin.lee 閱讀(361) 評論(0)  編輯  收藏 所屬分類: Linux shell 入門

     

    測試文件狀態(tài)
    test
    test一般有兩種格式,即:
    test condition

    [ condition ]
    使用方括號時,要注意在條件兩邊加上空格。測試文件狀態(tài)的條件表達式很多,但是最常用的可在下表中查到。
    -d 目錄 -s 文件長度大于0、非空
    -f 正規(guī)文件 -w 可寫
    -L 符號連接 -u 文件有suid位設置
    -r 可讀 -x 可執(zhí)行

    Shell代碼
    1. /home/l/g/tomotoboy >test -d sed.out   
    2. /home/l/g/tomotoboy >echo $?   
    3. 1  
    4.   
    5. /home/l/g/tomotoboy >test -f sed.out   
    6. /home/l/g/tomotoboy >echo $?   
    7. 0  
    8.   
    9. /home/l/g/tomotoboy >[ -f sed.out ]   
    10. /home/l/g/tomotoboy >echo $?   
    11. 0  
    12. /home/l/g/tomotoboy >[ -d sed.out ]   
    13. /home/l/g/tomotoboy >echo $?   
    14. 1  
    15.   
    16. /home/l/g/tomotoboy >[ -x sed.out ]   
    17. /home/l/g/tomotoboy >echo $?   
    18. 1  
    19.   
    20. /home/l/g/tomotoboy >[ -r sed.out ]   
    21. /home/l/g/tomotoboy >echo $?   
    22. 0  
    23.   
    24. /home/l/g/tomotoboy >[ -w sed.out ]   
    25. /home/l/g/tomotoboy >echo $?   
    26. 0  

    測試時使用邏輯操作符
    測試文件狀態(tài)是否為OK,但是有時要比較兩個文件狀態(tài)。shell提供三種邏輯操作完成此功能。
    -a   邏輯與,操作符兩邊均為真,結果為真,否則為假。
    -o   邏輯或,操作符兩邊一邊為真,結果為真,否則為假。
    ! 邏輯否,條件為假,結果為真。
    下面比較兩個文件sed.out、sed.txt:
    Shell代碼
    1. /home/l/g/tomotoboy >ls -al sed.out sed.txt   
    2. -rw-r--r--   1 tomotoboy member       159 Jul 30 16:47 sed.out   
    3. -rw-r--r--   1 tomotoboy member       655 Jul 31 14:44 sed.txt   
    4. /home/l/g/tomotoboy >[ -w sed.out -a -w sed.txt ]   
    5. /home/l/g/tomotoboy >echo $?   
    6. 0  
    7.   
    8. /home/l/g/tomotoboy >[ -x sed.out -a -r sed.txt]   
    9. -bash: [: missing `]'   
    10. /home/l/g/tomotoboy >[ -x sed.out -a -r sed.txt ]   
    11. /home/l/g/tomotoboy >echo $?   
    12. 1  
    13.   
    14. /home/l/g/tomotoboy >[ -x sed.out -o -r sed.txt ]   
    15. /home/l/g/tomotoboy >echo $?   
    16. 0  

    字符串測試
    字符串測試是錯誤捕獲很重要的一部分,特別在測試用戶輸入或比較變量時尤為重要。字符串測試有5種格式:
    test "string"
    test string_operator "string"
    test "string" string_operator "string"
    [ string_operator "string" ]
    [ "string" string_operator "string" ]
    這里,string_operator可為:
    =     兩個字符串相等。
    !=    兩個字符串不等。
    -z    空串。
    -n    非空串。

    Shell代碼
    1. /home/l/g/tomotoboy >[ -z $HELLO ]   
    2. /home/l/g/tomotoboy >echo $?   
    3. 0  
    4.   
    5. /home/l/g/tomotoboy >HELLO="hello"  
    6. /home/l/g/tomotoboy >[ -z $HELLO ]   
    7. /home/l/g/tomotoboy >echo $?   
    8. 1  
    9.   
    10. /home/l/g/tomotoboy >[ -n $HELLO ]   
    11. /home/l/g/tomotoboy >echo $?   
    12. 0  
    13.   
    14. /home/l/g/tomotoboy >[ !-n $HELLO ]   
    15. [ nohup -p 1 $HELLO ]   
    16. -bash: [: too many arguments   
    17. /home/l/g/tomotoboy >[ ![ -n $HELLO ] ]   
    18. [ [ -z $HELLO ] -n $HELLO ] ]   
    19. -bash: [: too many arguments   
    20. /home/l/g/tomotoboy >HI="hi"  
    21. /home/l/g/tomotoboy >[ $HELLO = $HI]   
    22. -bash: [: missing `]'   
    23. /home/l/g/tomotoboy >[ $HELLO = $HI ]   
    24. /home/l/g/tomotoboy >echo $?   
    25. 1  
    26.   
    27. /home/l/g/tomotoboy >[ $HELLO != $HI ]   
    28. /home/l/g/tomotoboy >echo $?   
    29. 0  

    測試數值
    測試數值可以使用許多操作符,一般格式如下:
    "number" numeric_operator "number"
    或者
    [ "number" numeric_operator "number" ]
    numeric_operator可為:
    -eq   數值相等。
    -ne   數值不相等。
    -gt   第一個數大于第二個數。
    -lt   第一個數小于第二個數。
    -le   第一個數小于等于第二個數。
    -ge   第一個數大于等于第二個數。

    Shell代碼
    1. /home/l/g/tomotoboy >Nbr=10  
    2. /home/l/g/tomotoboy >Nbr1=20  
    3. /home/l/g/tomotoboy >echo $?   
    4. 0  
    5.   
    6. /home/l/g/tomotoboy >Nbr -ne Nbr1   
    7. -bash: Nbr: command not found   
    8. /home/l/g/tomotoboy >$Nbr -ne $Nbr1   
    9. -bash: 10: command not found   
    10. /home/l/g/tomotoboy >[ "$Nbr" -ne "$Nbr1" ]   
    11. /home/l/g/tomotoboy >echo $?   
    12. 0  
    13.   
    14. /home/l/g/tomotoboy >[ "$Nbr" -e "$Nbr1" ]   
    15. -bash: [: -e: binary operator expected   
    16. /home/l/g/tomotoboy >[ "$Nbr" -eq "$Nbr1" ]   
    17. /home/l/g/tomotoboy >echo $?   
    18. 1  
    19. /home/l/g/tomotoboy >[ "$Nbr" -gt "$Nbr1" ]   
    20. /home/l/g/tomotoboy >echo 4?   
    21. 4?   
    22. /home/l/g/tomotoboy >echo $?   
    23. 0  
    24.   
    25. /home/l/g/tomotoboy >[ "$Nbr" -gt "$Nbr1" ]   
    26. /home/l/g/tomotoboy >echo $?   
    27. 1  
    28.   
    29. /home/l/g/tomotoboy >[ "$Nbr" -lt "$Nbr1" ]   
    30. /home/l/g/tomotoboy >echo $?   
    31. 0  

    可以不必將整數值放入變量,直接用數字比較即可,但要加引號。
    Shell代碼
    1. /home/l/g/tomotoboy >[ "99" -ge "60" ]   
    2. /home/l/g/tomotoboy >echo $?   
    3. 0  


    expr用法
    expr命令一般用于整數值,但也可用于字符串。一般格式為:
    expr argument operator argument
    expr也是一個手工命令行計數器。
    Shell代碼
    1. /home/l/g/tomotoboy >expr 10 + 10  
    2. 20  
    3.   
    4. /home/l/g/tomotoboy >expr 45 / 4  
    5. 11  

    使用乘號時,必須用反斜線屏蔽其特定含義。因為shell可能會誤解顯示星號的意義
    Shell代碼
    1. /home/l/g/tomotoboy >expr 30 \* 100  
    2. 3000  

    增量計數expr在循環(huán)中用于增量計算。首先,循環(huán)初始化為 0,然后循環(huán)值加1,反引號的用法意即替代命令。最基本的一種是從(expr)命令接受輸出并將之放入循環(huán)變量
    Shell代碼
    1. /home/l/g/tomotoboy >loop=0  
    2. /home/l/g/tomotoboy >loop=`expr $loop + 1`   
    3. /home/l/g/tomotoboy >echo   
    4.   
    5. /home/l/g/tomotoboy >echo $?   
    6. 0  
    7. /home/l/g/tomotoboy >echo $loop   
    8. 1  
    數值測試
    可以用expr測試一個數。如果試圖計算非整數,將返回錯誤。
    /
    Shell代碼
    1. home/l/g/tomotoboy >f=1.1  
    2. /home/l/g/tomotoboy >expr f + 10  
    3. expr: non-numeric argument   
    4. /home/l/g/tomotoboy >echo $?   
    5. 2  
    6.   
    7. /home/l/g/tomotoboy >expr $HELLO + 10  
    8. expr: non-numeric argument   
    9. /home/l/g/tomotoboy >echo $?   
    10. 2  
    11.   
    12. /home/l/g/tomotoboy >expr "$HELLO"  + 10  
    13. expr: non-numeric argument   
    14. /home/l/g/tomotoboy >echo $?   
    15. 2  
    16.   
    17. /home/l/g/tomotoboy >expr $f + 10  
    18. expr: non-numeric argument  

    expr也可以返回其本身的退出狀態(tài),不幸的是返回值與系統(tǒng)最后退出命令剛好相反,成功返回1,任何其他值為無效或錯誤。下面的例子測試兩個字符串是否相等,這里字符串為“hello”和“hello” 。

    Shell代碼
    1. /home/l/g/tomotoboy >expr $HELLO = "hello"  
    2. 1  
    3. /home/l/g/tomotoboy >echo $?   
    4. 0  

    模式匹配
    expr也有模式匹配功能。可以使用expr通過指定冒號選項計算字符串中字符數。.*意即任何字符重復0次或多次.
    Shell代碼
    1. /home/l/g/tomotoboy >cat sed.txt   
    2. 605408211   pts/16       Jul 31 13:54   (218.0.1.42)   
    3. caodejun   pts/44       Jul 31 14:16    (219.148.133.31)   
    4. duke1988   pts/45       Jul 31 14:41    (218.104.163.66)   
    5. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
    6. nefu_luyanshen   pts/23       Jul 31 14:33      (218.25.6.142)   
    7. nefu_luyanshen   pts/48       Jul 31 12:59      (218.25.6.142)   
    8. shuzigui   pts/21       Jul 31 12:11    (121.35.248.193)   
    9. tomotoboy   pts/41       Jul 31 13:31   (219.221.99.155)   
    10. waterlooz   pts/25       Jul 31 08:48   (121.0.29.225)   
    11. wsoangel   pts/35       Jul 31 13:40    (116.233.219.10)   
    12. xp55699312   pts/42       Jul 31 14:12  (61.152.132.103)   
    13. zyy0904    pts/43       Jul 31 13:53    (125.33.195.36)   
    14.   
    15. /home/l/g/tomotoboy >VALUE=sed.txt   
    16. /home/l/g/tomotoboy >expr $VALUE : tomotoboy , '.*'  
    17. expr: syntax error   
    18. /home/l/g/tomotoboy >expr $VALUE : tomotoboy   
    19. 0  
    20.   
    21. /home/l/g/tomotoboy >   
    22. /home/l/g/tomotoboy >expr $VALUE:tomotoboy   
    23. sed.txt:tomotoboy   
    24. /home/l/g/tomotoboy >expr $VALUE: tomotoboy   
    25. expr: syntax error   
    26. /home/l/g/tomotoboy >expr $VALUE : tomotoboy   
    27. 0  
    28. /home/l/g/tomotoboy >expr $VALUE :tomotoboy   
    29. expr: syntax error   
    30. /home/l/g/tomotoboy >expr $VALUE : tomotoboy   
    31. 0  
    32. /home/l/g/tomotoboy >expr $VALUE : tomotoboy, '.*'  
    33. expr: syntax error   
    34. /home/l/g/tomotoboy >expr $VALUE : tomotoboy , '.*'  
    35. expr: syntax error   
    36.   
    37. /home/l/g/tomotoboy >expr $VALUE :  '.*'  
    38. 7  
    39.   
    40. /home/l/g/tomotoboy >expr $VALUE : tomotoboy   
    41. 0  
    42.   
    43. /home/l/g/tomotoboy >expr $VALUE : "tomotoboy"  
    44. 0  
    45.   
    46. /home/l/g/tomotoboy >expr $VALUE : "nefu_luyanshen"  
    47. 0  
    這里沒有搞懂,tomotoboy和nefu_luyanshen,明明存在而結果是0
    主站蜘蛛池模板: 免费无码H肉动漫在线观看麻豆| 亚洲成熟xxxxx电影| 亚洲Av无码一区二区二三区| 99热这里有免费国产精品| 亚洲精品无码成人AAA片| 波霸在线精品视频免费观看| 亚洲AV无码乱码精品国产| 国产亚洲高清在线精品不卡| 免费无码不卡视频在线观看| 亚洲日本一线产区和二线产区对比| 免费无码AV电影在线观看| www.亚洲日本| 麻豆国产精品入口免费观看| 亚洲av日韩综合一区久热| 免费国产在线观看不卡| 十八禁的黄污污免费网站| 国产亚洲精品精品国产亚洲综合| 中文在线观看国语高清免费| 亚洲av无码不卡| 69精品免费视频| 中国china体内裑精亚洲日本| 日本一区免费电影| 成人免费ā片在线观看| 亚洲欧洲日产国产综合网| 国产精品久久永久免费| 亚洲AV成人一区二区三区观看 | 一二三四视频在线观看中文版免费 | 久久久久亚洲AV无码观看| 免费观看黄色的网站| 亚洲中文无码亚洲人成影院| 免费无遮挡无码永久在线观看视频| 一级毛片不卡免费看老司机| 亚洲乱码无码永久不卡在线| 五月婷婷在线免费观看| 亚洲成a∧人片在线观看无码| 国内精品99亚洲免费高清| 99ee6热久久免费精品6| 亚洲欧美国产日韩av野草社区| 亚洲伊人成无码综合网 | 亚洲男人的天堂在线va拉文| 色欲色香天天天综合网站免费|