<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
    主站蜘蛛池模板: 精品亚洲一区二区三区在线观看 | 亚洲电影国产一区| 国产精品久免费的黄网站| 操美女视频免费网站| 亚洲免费观看网站| 青娱分类视频精品免费2| 久久久久久久91精品免费观看| 无码av免费毛片一区二区| 动漫黄网站免费永久在线观看| 精品福利一区二区三区免费视频 | 中国国产高清免费av片| 国产精品无码免费专区午夜| 两个人看的www免费高清 | 免费的黄网站男人的天堂| 亚洲黄片手机免费观看| a级特黄毛片免费观看| 99re在线精品视频免费| 无码国产精品一区二区免费虚拟VR| 亚洲美女又黄又爽在线观看| 精品日韩99亚洲的在线发布| 亚洲一级视频在线观看| 亚洲人妖女同在线播放| 亚洲熟妇无码一区二区三区导航| 亚洲人成人网站18禁| 黄网站色视频免费观看45分钟| 一级做a爰片久久毛片免费看 | 亚洲国产精品线观看不卡| 久久乐国产综合亚洲精品| 激情婷婷成人亚洲综合| 精品一区二区三区高清免费观看| 久久精品成人免费看| 91香蕉成人免费网站| 国产成人涩涩涩视频在线观看免费| 亚洲国产精品专区在线观看| 久久夜色精品国产亚洲AV动态图| 亚洲国产成人久久| 男女男精品网站免费观看 | 亚洲精品V天堂中文字幕| 一级毛片人与动免费观看 | 亚洲成a∨人片在无码2023| xxxxx做受大片视频免费|