乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      shell程序編寫從入門到精通(中)

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

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多