#7shell腳本編程之bash運(yùn)算和條件測試命令-創(chuàng)新互聯(lián)

編程語言:

創(chuàng)新互聯(lián)公司網(wǎng)絡(luò)公司擁有10年的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗(yàn),近1000家客戶的共同信賴。提供做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站開發(fā)、網(wǎng)站定制、買友情鏈接、建網(wǎng)站、網(wǎng)站搭建、成都響應(yīng)式網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計(jì)師打造企業(yè)風(fēng)格,提供周到的售前咨詢和貼心的售后服務(wù)

   問題空間:就是使用人類的自然語言描述的任務(wù);

   解空間:就是使用編程語言描述任務(wù)的實(shí)施步驟和顯示最終結(jié)果;

  編程思想:能夠把編程語言所提供的語法格式,隨時(shí)隨地地轉(zhuǎn)換成能夠解決問題的思路;

  對(duì)于編程語言的學(xué)習(xí):

   1.學(xué)習(xí)編程語言的語法格式;

   2.學(xué)習(xí)工具的使用(庫、命令)

   3.算法

   4.數(shù)據(jù)結(jié)構(gòu)

  學(xué)習(xí)編程語言的目標(biāo):

   將問題空間和解空間對(duì)應(yīng)起來:最直接的編發(fā)就是使用解空間的語言習(xí)慣來進(jìn)行思考;

  shell腳本編程:

   shell腳本的內(nèi)容和格式,

    首行,絕對(duì)行首,shebang(解釋器程序的絕對(duì)路徑)

    注意信息:以#占據(jù)絕對(duì)行首的行;

    為了能夠在程序中突入程序的功能,適當(dāng)?shù)奶砑涌瞻仔校苑指舨煌δ艿脑创a;

    有一定的縮進(jìn)

  利用bash腳本編程實(shí)現(xiàn)算術(shù)運(yùn)算:

   +、-

   *、/

   %:模運(yùn)算,取余數(shù)

   **|^

   只能強(qiáng)行的算術(shù)運(yùn)算符號(hào):

   +=:let B=B+2  --> let B+=2

   -=:let B=B-2  --> let B-=2

   *=:let B=B*2  --> let B*=2

   /=:let B=B/2  --> let B/=2

   %=:let B=B%2  --> let B%=2

   特殊的增強(qiáng)型算術(shù)運(yùn)算:

    let B=B+1  --> let B+=1  --> let B++

    let B=B-1  --> let B-=1  --> let B--

    B++:先將B的值賦給其他變量,然后再自身+1;

    ++B:先做自身+1計(jì)算,然后再將B值賦給其他變量

   算術(shù)常用命令 :

    1.let VAR=算術(shù)表達(dá)式

     將算術(shù)表達(dá)方式先進(jìn)行算術(shù)運(yùn)算,并將運(yùn)算得到的結(jié)果保存到變量var中;

    2.VAR=$[算術(shù)表達(dá)式]

     算術(shù)表達(dá)式中如果有變量引用,可是使用$引用,也可以省略$

    3.VAR=$((算術(shù)表達(dá)式))

     算術(shù)表達(dá)式中如果有變量引用,可是使用$引用,也可以省略$

    4.expr argu1 argu2 argu3

     argu1和argu3必須是數(shù)值;

     argu2必須是運(yùn)算符號(hào)

    5.echo "算術(shù)表達(dá)式"|bc

    注意:*號(hào),在某些情況下,需要轉(zhuǎn)義;

    例子;

     統(tǒng)計(jì)/etc/fastab、/etc/passwd、/etc/issue、三個(gè)文件中,以字母r開頭的行數(shù)的總和;

 變量:存儲(chǔ)數(shù)據(jù)空間的容器

  弱變量:弱類型變量,字符型(默認(rèn)),數(shù)值型(不包括浮點(diǎn)型)

 條件測試命令:

  test expression

   shell內(nèi)建命令:

  [expression]

   外部命令:

  `expression`

   bash的內(nèi)部關(guān)鍵字:

 注意:這類命令一般沒有執(zhí)行結(jié)果,只有執(zhí)行狀態(tài)返回值;

 test測試命令有三類測試表達(dá)式:

   1.數(shù)值測試:雙目操作符

     -eq:被測試的兩個(gè)數(shù)值是否相等,相等為真,不等為假;

     -ne:被測試的兩個(gè)數(shù)值是否不相等,不等為真,相等為假;

     -gt:被測試的兩個(gè)數(shù)值,左邊的是否大于右邊的,大于為真,不大于為假;

     -lt:被測試的兩個(gè)數(shù)值,左邊的是否小于右面的,小于為真,不小于為假;

     -ge:被測試的兩個(gè)數(shù)值,左邊的是否大于等于右邊的,大于等于為真,小于為假;

     -le:被測試的兩個(gè)數(shù)值,左邊的是否小于等于后邊的,小于等于為真,大于為假;

   2.字符串測試

    雙目操作符:

     ==|= :被測試的兩個(gè)字符串是否相同,相同為真,不同為假;

     != :被測試的兩個(gè)字符串是否不相同,不同為真,相同為假;

     > :被測試的兩個(gè)字符串在ASCII碼表中對(duì)應(yīng)的二進(jìn)制數(shù)值,左面是否大于右邊,大于為真,小于為假;

     < :被測試的兩個(gè)字符串在ASCII碼表中對(duì)應(yīng)的二進(jìn)制數(shù)值,左面是否小于右邊,小于為真,大于為假;

      注意:>和<必須用在`expression`測試語句中;

     =~ :被測試的兩個(gè)字符串,左側(cè)字符串能否被右側(cè)的pattern匹配,能匹配為真,不能匹配為假;

    單目操作符:

     -z 'string':判斷指定的字符串是否為空串,空位真,不空為假;

     -n 'string':判斷指定的字符串是否為非空串,非空位真,空為假;

    注意:

     1.通常情況下,字符串要加引號(hào),單引號(hào)或雙引號(hào)都行,根據(jù)實(shí)際情況選擇即可;

     2.[[]]和[]在某些情況下,可能意義不同,要區(qū)分使用;

     3.表達(dá)式兩端以及操作符兩端都要有空格;

   3.文件狀態(tài)測試

    單目操作符:

    文件的存在性測試:如果被測試的文件存在,為真,不存在則為假;

      -a | -e

       [ -e /backup ]

    文件類型測試(測試存在性):

      -b file:被測試的文件是否存在并且是否為塊設(shè)備;存在且為塊設(shè)備為真,否則為假;

      -c file:被測試的文件是否存在并且是否為字符設(shè)備;存在且為字符設(shè)備為真,否則為假;

      -d file: 被測試的文件是否存在并且是否為目錄文件;存在且為目錄文件為真,否則為假;

      -f file:被測試的文件是否存在并且是否為普通文件; 存在且為普通文件為真,否則為假;

      -h | -L file:被測試的文件是否存在并且是否為符號(hào)鏈接文件;存在且為符號(hào)鏈接文件為真,否則為假;

      -p:被測試的文件是否存在并且是否為管道文件;存在且為管道文件為真,否則為假;

      -s:被測試的文件是否存在并且是否為套接字文件;存在且為套接字為真,否則為假;

    文件的訪問權(quán)限測試:

      -r file:被測試的文件是否存在并且當(dāng)前有效用戶是否可讀;文件存在并且當(dāng)前有效用戶可讀為真,否則為假;

      -w file:被測試的文件是否存在并且當(dāng)前有效用戶是否可寫;文件存在并且當(dāng)前有效用戶可寫為真,否則為假;

      -x file:被測試的文件是否存在并且當(dāng)前有效用戶是否可可執(zhí)行;文件存在并且當(dāng)前有效用戶可執(zhí)行為真,否則為假;

    文件的特殊權(quán)限標(biāo)識(shí)測試:

      -u file:被測試的文件是否存在并且是否設(shè)置了SUID權(quán)限;文件存在并且設(shè)置了SUID權(quán)限為真,否則為假;

      -g file:被測試的文件是否存在并且是否設(shè)置了SGID權(quán)限;文件存在并且設(shè)置了SGID權(quán)限為真,否則為假;

      -k file:被測試的文件是否存在并且是否設(shè)置了STICKY權(quán)限;文件存在并且設(shè)置了STICKY權(quán)限為真,否則為假;

    文件的所有權(quán)測試:

      -O file:被測試的文件是否存在并且其屬主是否為當(dāng)前有效用戶;文件存在并且為當(dāng)前有效用戶為真,否則為假;

      -G file:被測試的文件是否存在并且其屬主是否為當(dāng)前有效用戶的組;文件存在并且為當(dāng)前有效用戶組為真,否則為假;

    文件內(nèi)容是否為空:

      -s file:被測試的文件是否存在且內(nèi)容不為空,存在且內(nèi)容不為空為真,否者為假;

    時(shí)間戳測試:

      -N file:被測試的文件自從上一次被修改之后,是否被修改過;修改過為真,否者為假:

    雙目操作符:

     file1 -ef file2:測試兩個(gè)文件是否指向同一個(gè)文件系統(tǒng)的相同inode的硬連接;

     file1 -nt file2:被測試的文件,file1是否比file2更新,更新為真,否則為假;

     file1 -ot file2:被測試的文件,file1是否比file2更舊,更舊為真,否則為假;

 測試語句中可以添加邏輯運(yùn)算:

  第一種表達(dá)方式:

   [ -O /tmp/test ] && [ -s /tmp/test ]

   [ -O /tmp/test ] || [ -s /tmp/test ]

  第二種表達(dá)方式:

   [ -O /tmp/test -a -s /tmp/test ]

   [ -O /tmp/test -o -s /tmp/test ]

   [ ! -O /tmp/test ]

 命令的執(zhí)行結(jié)果:

  正常的輸出結(jié)果

  命令的執(zhí)行狀態(tài)返回值:

   0-255

   0:表示命令執(zhí)行成果;

   1,2,127:系統(tǒng)保留;

   3-126,128-255:用戶自定義的執(zhí)行狀態(tài)返回值;

  exit [#]

   退出當(dāng)前shell的登錄,

   當(dāng)shell腳本運(yùn)行時(shí),一旦遇到exit命令,將立即結(jié)束當(dāng)前shell進(jìn)行,同時(shí)腳本的運(yùn)行也將被停止,即exit后面的所有命令都不再被解釋執(zhí)行;

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁名稱:#7shell腳本編程之bash運(yùn)算和條件測試命令-創(chuàng)新互聯(lián)
路徑分享:http://muchs.cn/article20/iosco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、虛擬主機(jī)、微信公眾號(hào)自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站