免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
shell程序編寫從入門到精通(中)
3>在Shell中使用數(shù)據(jù)變量
  
  用戶可以在Shell中使用數(shù)據(jù)變量,例如ba.sh程序:
  
      cd   /usr/icewalk
      ls   |   cpio -o > /dev/fd0
  
  該程序中要備份的目錄為一常量,即該程序只能用來備份一個目錄。若在該程序中使用變量,則會使其更通用:
  
      workdir=$1
      cd $workdir
      ls * |   cpio -o > /dev/fd0
  
  通過這一改變,用戶可以使用程序備份變量$workdir指定的目錄。例如我們要備份/home/www的內容,只要運行ba.sh /home/www即可實現(xiàn)。(若不明白 $1,下面將詳細介紹shell參數(shù)的傳遞,$1代表本sh程序-ba.sh的第一個參數(shù))
  
  4>在Shell程序中加上注釋
  
  為了增加程序的可讀性,我們提倡加入注釋。在Shell程序中注釋將以"#"號開始。當Shell解釋到"#"時,會認為從"#"號起一直到該行行尾為注釋。
  
  5>對Shell變量進行算術運算
  
  高級語言中變量是具有類型的,即變量將被限制為某一數(shù)據(jù)類型,如整數(shù)或字符類型。Shell變量通常按字符進行存儲,為了對Shell變量進行算術運算,必須使用expr命令。
  
  expr命令將把一個算術表達式作為參數(shù),通常形式如下:
  
      expr [數(shù)字] [操作符] [數(shù)字]
  
  由于Shell是按字符形式存儲變量的,所以用戶必須保證參加算術運算的操作數(shù)必須為數(shù)值。下面是有效的算術操作符:
  
      +   兩個整數(shù)相加
      -   第一個數(shù)減去第二個數(shù)
      *   兩整數(shù)相乘
      /   第一個整數(shù)除以第二個整數(shù)
      %   兩整數(shù)相除,取余數(shù)
    例如:
      $expr 2 + 1
       結果顯示:3
      $expr 5 - 3
       結果顯示:2
  
  若expr的一個參數(shù)是變量,那么在表達式計算之前用變量值替換變量名。
      $int=3
      $expr $int + 4
      結果顯示:7
  用戶不能單純使用"*"做乘法,若輸入:
      $expr 4*5
  系統(tǒng)將會報錯,因為Shell看到"*"將會首先進行文件名替換。正確形式為:
      $expr 4 \* 5
       結果顯示:20
  多個算術表達式可以組合在一起,例如:
      $expr 5 + 7 / 3
      結果顯示:7
  運算次序是先乘除后加減,若要改變運算次序,必須使用"`"號,如:
      $int=`expr 5 + 7`
      $expr $int/3
       結果顯示:4
      或者:
      $expr `expr 5+7`/3
      結果顯示:4
  
  6>向Shell程序傳遞參數(shù)
  
  一個程序可以使用兩種方法獲得輸入數(shù)據(jù)。一是執(zhí)行時使用參數(shù)。另一種方法是交互式地獲得數(shù)據(jù)。vi編輯程序可以通過交互式的方法獲得數(shù)據(jù),而ls和expr則從參數(shù)中取得數(shù)據(jù)。以上兩種方法Shell程序都可以使用。在"交互式讀入數(shù)據(jù)"一節(jié)中將介紹Shell程序通過交互式的方法獲得參數(shù)。
  
  通過命令行給Shell程序傳遞參數(shù)可以擴大程序的用途。以前面提到的ba.sh程序為例:
    $cat >re.sh
    cd $workdir
    cpio -i < /dev/fd0
    ^d
  
  程序re.sh恢復了ba.sh程序備份的所有文件。若只從軟盤上恢復一個指定的文件,可以用該文件名作為參數(shù),傳遞給Shell程序re.sh:
  
  程序改寫如下:
    $cat >re2.sh
    cd $workdir
    cpio -i $1 < /dev/fd0
    ^d
  
  用戶可以指定要恢復的文件,例如fname
  
    $re2.sh fname
  
  此時文件fname作為第一個位置參數(shù)傳遞給re2.sh,re2.sh的缺點是要恢復兩個或多個文件要重復運行,我們可以用$*變量傳遞不確定的參數(shù)給程序:
  
    $cat >re3.sh
    cd $workdir
    cpio -i $* < /dev/fd0
    ^d
  我們就可以恢復多個文件,例如fname1,fname2,fname3
    $re3.sh fname1 fname2 fname3
    (以上程序re.sh,re2.sh,re3.sh,假設用戶已經chmod了可執(zhí)行權利)
  
  因為沒有賦值的變量可以作為NULL看待,所以若是程序re3.sh在執(zhí)行時候沒賦予參數(shù),那么一個空值將被插入到cpio命令中。該命令將恢復所有保存的文件。
  
  條件判斷語句
  
  條件判斷語句是程序設計語言中十分重要的語句,該語句的含義是當某一條件滿足時,執(zhí)行指定的一組命令。
  
  1>if - then語句
  
    格式: if command1
       then
         command2
         command3
       fi      ---(if 語句結束)
         command4
  
  每個程序或命令執(zhí)行結束后都有一個返回的狀態(tài),用戶可以用Shell變量$?獲得這一狀態(tài)。if語句檢查前面命令執(zhí)行的返回狀態(tài),若該命令成功執(zhí)行,那么在then和fi之間的命令都將被執(zhí)行。在上面的命令序列中,command1和command4總要執(zhí)行。若command1成功執(zhí)行,command2和command3也將執(zhí)行。
  
  請看下面程序:
      #unload -program to backup and remove files
      cd $1
      ls -a | cpio -o > /dev/mnt0
      rm *
  
  該程序在備份資料后,刪除檔案,但當cpio命令不能成功執(zhí)行時,rm命令還是把資料刪除了,我們可不希望這樣,為了避免此情況,可以用if - then語句:
      #--卸載和判斷刪除程序
  
      cd $1
      if ls -a | cpio > /dev/mnt0
      then
        rm *
      fi
  上面程序在cpio執(zhí)行成功后才刪除檔案
  
  同時,若執(zhí)行沒有成功,我們希望得到提示,sh中的echo命令可以向用戶顯示消息,并顯示后換行,上面程序可以寫成:
       #--卸載和判斷刪除程序
      cd $1
      if ls -a | cpio > /dev/mnt0
      then
        echo "正刪除文件資料... ..."
        rm *
      fi
  
  echo命令可以使用一些特殊的逃逸字符進行格式化輸出,下面是這些字符及其含義:
  
      \b  Backspace
      \c  顯示后不換行
      \f  在終端上屏幕的開始處顯示
      \n  換行
      \r  回車
      \t  制表符
      \v  垂直制表符
      \   反斜框
      \0nnn 用1,2或3位8進制整數(shù)表示一個ASCII碼字符
  
  2>if - then - else語句
  
  不用多說它的作用,別的高級語言中都有,格式為:
    if command1
    then
      command2
      command3
    else
      command4
      command5
    fi
  
  在此結構中,command1中是先執(zhí)行,當command1成功執(zhí)行時,將執(zhí)行command2和command3,否則執(zhí)行command4和command5
  
  注意看下面程序:
      #備份程序
      cd $1
      if ls -a |cpio -o > /dev/mnt0
      then
        echo "刪除源資料... ..."
        rm *
      else
        echo "磁帶備份失敗!"
      fi
  
  3>test命令進行條件測試
  
  if語句可以通過測試命令執(zhí)行的返回狀態(tài)來控制命令的執(zhí)行,若要測試其他條件,在bsh中可以使用test命令。該命令檢測某一條件,當條件為真時返回0,否則返回非0值。test命令可以使Shell程序中的if語句象其他程序語言中的條件判斷語句一樣,具有很強的功能。
  
  test命令的使用方法為:
      test condition
  可測試的條件分為4類:
  1)測試兩個字符串之間的關系。
  2)測試兩個整數(shù)之間關系。
  3)測試文件是否存在或是否具有某種狀態(tài)或屬性。
  4)測試多個條件的與(and)或(or)組合。
  
  1、條件語句>>test語句
  
  1>測試字符串間的關系
  
  bsh把所有的命令行和變量都看作字符串。一些命令如expr和test可以把字符當作數(shù)字進行操作。
  
  同樣任何數(shù)字也可以作為字符串進行操作。
  
  用戶可以比較兩個字符串相等或不等,也可以測試一個串是否賦了值。有關串的操作符如下:
      str1 = str2      當兩個串有相同內容、長度時為真
      str1 != str2      當串str1和str2不等時為真
      -n str1        當串的長度大于0時為真(串非空)
      -z str1        當串的長度為0時為真(空串)
      str1          當串str1為非空時為真
  
  不但Shell程序可以使用test進行條件判斷,test命令也可以獨立執(zhí)行,如:
  
      $str1=abcd
      $test $str1 = abcd
      $echo $?
      結果顯示:0
  
  與上例中第一行賦值語句中的等號不同,test命令中的等號兩邊必須要有空格。本例test命令共有3個參數(shù)。注意兩個串相等必須是長度和內容都相等。
  
      $str1="abcd "
      $test "$str1" = abcd
      $echo $?
      結果顯示:1
  
  上面str1包含5個字符,其中最后一個為空格符。而test命令中的另一個串只有4個
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Unix系列shell程序編寫(中)
Bourne Shell及shell編程 2
【轉】【轉】Shell 編程中的函數(shù)返回值
用GDB調試程序(二)
根文件系統(tǒng)的掛載過程
sh,bash,csh,tcsh等shell的區(qū)別
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服