成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

我的朗科運(yùn)維第八課

shell編程之執(zhí)行結(jié)構(gòu)

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到北辰網(wǎng)站設(shè)計(jì)與北辰網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋北辰地區(qū)。

case分支選擇結(jié)構(gòu):

    case 詞 in [模式 [| 模式] ...) 命令 ;; ] ... esac

    case 變量引用 in    

        模式1)

            分支1

            ;;

        模式2)

            分支2

            ;;

        ...

        *)

            默認(rèn)分支

            ;;

    esac

模式(PATTERN):

    1.普通的文本字符

    2.globbing風(fēng)格的通配符

        *:任意長(zhǎng)度任意字符

        ?:任意的單個(gè)字符

        []:范圍內(nèi)的任意單個(gè)字符

        [^]:范圍外的任意單個(gè)字符

    3.|:或

例:提示用戶(hù)輸入信息,然后判斷用戶(hù)輸入的信息是否合法;

#!/bin/bash
#
read -p "Please make your choice[yes of no]: " CHOICE
case $CHOICE in
    yes|YES)
        echo "right."
        ;;
    NO|no)
        echo "wrong."
        ;;
    *)
        echo "Unknow."
        ;;
esac

if的分支結(jié)構(gòu)和case的分支結(jié)構(gòu)之間的區(qū)別:

    相同點(diǎn):

        1.都是條件為真,執(zhí)行對(duì)應(yīng)分支的語(yǔ)句;條件為假,就不執(zhí)行;

        2.都可以設(shè)置默認(rèn)分支語(yǔ)句,即:所有條件都不匹配的時(shí)候,所執(zhí)行的語(yǔ)句;

    不相同點(diǎn):

        1.if是根據(jù)命令的執(zhí)行狀態(tài)返回值來(lái)判斷正確與否;case是根據(jù)變量的值的取值內(nèi)容是否匹配模式來(lái)判斷正確與否;

        2.case的每個(gè)分支都必須使用“;;”結(jié)束;

while與until循環(huán)結(jié)構(gòu):

    while

        while 命令 ; do 命令 ;done

        while CONDITION ; do

            循環(huán)體

        done    

            進(jìn)入循環(huán)條件:CONDITION一直為真

            退出循環(huán)條件:CONDITION為假

    until

        until 命令 ; do 命令 ; done

        until CONDITION ; do

            循環(huán)體

        done

            進(jìn)入循環(huán)條件:CONDITION一直為假

            退出循環(huán)條件:CONDITION為假

其中:while CONDITION ; do CMD ; done 相當(dāng)于 until ! CONDITION ; do CMD ; done

注意: 對(duì)于while和until兩個(gè)循環(huán)結(jié)構(gòu)來(lái)講,如果要實(shí)施變量增量操作,必須手動(dòng)給出;

例:利用while和until循環(huán)結(jié)構(gòu),計(jì)算100以?xún)?nèi)所有整數(shù)的和;

#!/bin/bash
#
declare -i I=1
while [ $I -lt 100 ] ; do
    let SUM+=$I
    let l++
done
echo $SUM

#!/bin/bash
#
declare -i I=1
until [ $I -gt 100 ] ; do
    let SUM+=$I
    let I++
done
echo $SUM

循環(huán)控制語(yǔ)句:

    continue   

    break

continue:

    continue [n]

    提前結(jié)束第n層的本次循環(huán),直接進(jìn)入下一輪條件判斷,若符合循環(huán)進(jìn)入條件,則開(kāi)啟下一輪循環(huán);

break:

    break [n]

    提前結(jié)束第n層循環(huán);不再繼續(xù)后續(xù)循環(huán);

無(wú)限循環(huán)用法:

    while true ; do

        循環(huán)體

    done

    until false ; do

        循環(huán)體

    done

在此類(lèi)的循環(huán)結(jié)構(gòu)中,必須適當(dāng)?shù)氖褂胏ontinue和break,以保證循環(huán)不會(huì)一直持續(xù)下去;

能夠?qū)崿F(xiàn)遍歷功能的while循環(huán);

while read LINES ; do

    循環(huán)體

done < /PATH/FROM/SOMEFILE

until ! read LINES ; do 

    循環(huán)體

done < /PATH/FROM/SOMEFILE

例:文件abc.txt內(nèi)容如下:

1,2,3,5,6

b,d,g,h,e

6,3,7,1,7

f,g,e,y,a

寫(xiě)一個(gè)腳本,利用循環(huán)結(jié)構(gòu),輸出每一行的第二個(gè)和第四個(gè)字符(以逗號(hào)分隔)

#!/bin/bash
#
while read LINES ; do
    echo -n $LINES | cut -d, -f2,4 | tr '\n' ','
done < abc.txt

select

    select循環(huán)只要用于創(chuàng)建一個(gè)菜單式列表,供用戶(hù)進(jìn)行選擇;

    列表是按照數(shù)字順序排列的,我們只要選擇數(shù)字即可;

    一般來(lái)講,select與case一起使用;

    seelcet是一個(gè)無(wú)限循環(huán)結(jié)構(gòu),因此,必須在循環(huán)體中使用break命令以退出循環(huán),或者可以使用exit命令直接終止腳本運(yùn)行;

    select NAME [in 詞語(yǔ) ...; ] do 命令 ; done

    select NAME [in LIST] ; do

        命令

    done

例子:

#!/bin/bash
#
select | in meat soap rice vag ; do
    case $I in
        meat)
            echo "I like it."
            break
            ;;
        soap)
            echo "I don't like it."
            continue
            ;;
        *)
            exit
   esac
done

shell腳本編程之函數(shù)

systemV風(fēng)格的服務(wù)管理腳本:

    給腳本傳遞一些參數(shù):start,stop,restart,status

    例:#ssh username@IP

把那些在腳本中重復(fù)出現(xiàn)并且沒(méi)有任何改變的代碼,封裝起來(lái),在適當(dāng)?shù)膱?chǎng)景中調(diào)用執(zhí)行;

程序員將這種被封裝起來(lái)的代碼稱(chēng)為功能提,或者叫模塊;

function -- 函數(shù)

在shell腳本編程中,函數(shù)是由若干條shell命令組成的語(yǔ)句快,通常用于代碼重用和模塊化封裝;

函數(shù)里面的內(nèi)容和shell程序形式上是一致的;不同之處就是,shell代碼可以直接被執(zhí)行;而函數(shù)中的內(nèi)容,不能獨(dú)立執(zhí)行,只有被調(diào)用的時(shí)候才被執(zhí)行;

函數(shù)是在shell程序的當(dāng)前shell中運(yùn)行的;

定義函數(shù):

    函數(shù)是由兩部分組成:函數(shù)名稱(chēng)+函數(shù)體(能夠?qū)崿F(xiàn)獨(dú)立功能的shell語(yǔ)句塊)

    語(yǔ)法一:

        function func_name{

            函數(shù)體

        }

    語(yǔ)法二:

        func_name(){

            函數(shù)體

        }

    注意:函數(shù)名和()之間不能有空白字符;

函數(shù)的使用:

    函數(shù)在定義的時(shí)候,其函數(shù)體中包含的所有命令均不會(huì)被執(zhí)行,只有函數(shù)被調(diào)用的時(shí)候,才會(huì)執(zhí)行其中的命令語(yǔ)句;

    調(diào)用方式:通過(guò)直接給出函數(shù)名稱(chēng)的方式調(diào)用;

有很多的函數(shù)是存放與專(zhuān)門(mén)用于保存函數(shù)的文件中,如果想要調(diào)用這樣的文件中保存的函數(shù),使用source命令(.)加載文件,然后再以直接給出函數(shù)名稱(chēng)的方式調(diào)用函數(shù);

使用set命令可以查看所有當(dāng)前shell中國(guó)生效的函數(shù);

使用unset命令可以撤銷(xiāo)已經(jīng)定義的函數(shù);

函數(shù)的返回值:

    兩種返回值:

        函數(shù)的執(zhí)行結(jié)果的返回值:

            1.在函數(shù)體中使用了echo或printf命令輸出結(jié)果;

            2.在函數(shù)體中某些命令輸出的結(jié)果;

        函數(shù)的狀態(tài)返回值:

            1.函數(shù)中最后一跳命令的執(zhí)行狀態(tài)返回值;

            2.自定義退出狀態(tài)碼;

                return [n]

                    n:0-255(1 2 127盡可能不適用)

                    0:表示無(wú)錯(cuò)誤返回

                    1-255:有錯(cuò)誤返回

                注意:只要函數(shù)在執(zhí)行是,遇到了return命令,不管函數(shù)中的命令語(yǔ)句是否全部執(zhí)行完成,立刻退出函數(shù);

函數(shù)的聲明周期:

    從被調(diào)用開(kāi)始,到遇到return命令或全部的語(yǔ)句執(zhí)行完成為止;

函數(shù)的實(shí)參:

    在函數(shù)體中,可以使用$1,$2,...位置變量為函數(shù)提供參數(shù);還可以使用$*或$@的方式引用所有位置參數(shù);還可以使用$#計(jì)算為函數(shù)傳遞的參數(shù)個(gè)數(shù);

    在調(diào)用函數(shù)的時(shí)候,直接在函數(shù)名稱(chēng)后面以空白字符分隔多個(gè)參數(shù)即可;

    比如: func_name arg1 arg2 ...

例子:

#!/bin/bash
#
addusers(){
    for I in {1..5} ; do
        if id $1$I &> /dev/null | ; then
            echo "User $1$I exists."
            return 5
        else
            useradd $1$I &> /dev/null
            echo $1$I | passwd --stdin $1$I
            echo "Create user $1$I funished."
        fi
    done
}
addusers $1

    傳遞給函數(shù)的位置參數(shù),是調(diào)用函數(shù)的時(shí)候,函數(shù)名稱(chēng)后面的有空白字符分隔的字符串序列;跟腳本的位置參數(shù)不是一回事;

變量:

    shell中的變量為弱變量

        1.無(wú)需事先聲明

        2.無(wú)需指定變量類(lèi)型,默認(rèn)為字符型

    變量分類(lèi):

        環(huán)境變量: 當(dāng)前shell及子shell

        本地變量: 當(dāng)前shell

        局部變量: local VAR_NAME=VALUE當(dāng)前函數(shù)體

        位置變量:

        特殊變量:

建議:手動(dòng)銷(xiāo)毀自己定義或聲明的所有變量;

函數(shù)的遞歸調(diào)用

    簡(jiǎn)單來(lái)說(shuō),就是在函數(shù)體中調(diào)用函數(shù)自身;

例:階乘:N!=N*(N-1)!=N*(N-1)*(N-2)!=...=N*(N-1)*(N-2)*...*2*1

#!/bin/bash
#
fact(){
    if [ $1 -eq 0 ] || [ $1 -eq 1 ] ; then
        echo 1
    else
        echo "$[$1*$(fact $[$1-1])]"
        fi
}
ehco -n "$1!="
fact $1

文章標(biāo)題:我的朗科運(yùn)維第八課
文章出自:http://jinyejixie.com/article40/ggejho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版商城網(wǎng)站、面包屑導(dǎo)航、響應(yīng)式網(wǎng)站建站公司、云服務(wù)器

廣告

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

綿陽(yáng)服務(wù)器托管