中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

我的朗科運維第八課

發布時間:2020-07-02 06:16:18 來源:網絡 閱讀:374 作者:520的羅 欄目:網絡安全

shell編程之執行結構

case分支選擇結構:

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

    case 變量引用 in    

        模式1)

            分支1

            ;;

        模式2)

            分支2

            ;;

        ...

        *)

            默認分支

            ;;

    esac

模式(PATTERN):

    1.普通的文本字符

    2.globbing風格的通配符

        *:任意長度任意字符

        ?:任意的單個字符

        []:范圍內的任意單個字符

        [^]:范圍外的任意單個字符

    3.|:或

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

#!/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的分支結構和case的分支結構之間的區別:

    相同點:

        1.都是條件為真,執行對應分支的語句;條件為假,就不執行;

        2.都可以設置默認分支語句,即:所有條件都不匹配的時候,所執行的語句;

    不相同點:

        1.if是根據命令的執行狀態返回值來判斷正確與否;case是根據變量的值的取值內容是否匹配模式來判斷正確與否;

        2.case的每個分支都必須使用“;;”結束;

while與until循環結構:

    while

        while 命令 ; do 命令 ;done

        while CONDITION ; do

            循環體

        done    

            進入循環條件:CONDITION一直為真

            退出循環條件:CONDITION為假

    until

        until 命令 ; do 命令 ; done

        until CONDITION ; do

            循環體

        done

            進入循環條件:CONDITION一直為假

            退出循環條件:CONDITION為假

其中:while CONDITION ; do CMD ; done 相當于 until ! CONDITION ; do CMD ; done

注意: 對于while和until兩個循環結構來講,如果要實施變量增量操作,必須手動給出;

例:利用while和until循環結構,計算100以內所有整數的和;

#!/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

循環控制語句:

    continue   

    break

continue:

    continue [n]

    提前結束第n層的本次循環,直接進入下一輪條件判斷,若符合循環進入條件,則開啟下一輪循環;

break:

    break [n]

    提前結束第n層循環;不再繼續后續循環;

無限循環用法:

    while true ; do

        循環體

    done


    until false ; do

        循環體

    done

在此類的循環結構中,必須適當的使用continue和break,以保證循環不會一直持續下去;

能夠實現遍歷功能的while循環;

while read LINES ; do

    循環體

done < /PATH/FROM/SOMEFILE


until ! read LINES ; do 

    循環體

done < /PATH/FROM/SOMEFILE

例:文件abc.txt內容如下:

1,2,3,5,6

b,d,g,h,e

6,3,7,1,7

f,g,e,y,a

寫一個腳本,利用循環結構,輸出每一行的第二個和第四個字符(以逗號分隔)

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

select

    select循環只要用于創建一個菜單式列表,供用戶進行選擇;

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

    一般來講,select與case一起使用;

    seelcet是一個無限循環結構,因此,必須在循環體中使用break命令以退出循環,或者可以使用exit命令直接終止腳本運行;

    select NAME [in 詞語 ...; ] 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腳本編程之函數

systemV風格的服務管理腳本:

    給腳本傳遞一些參數:start,stop,restart,status

    例:#ssh username@IP

把那些在腳本中重復出現并且沒有任何改變的代碼,封裝起來,在適當的場景中調用執行;

程序員將這種被封裝起來的代碼稱為功能提,或者叫模塊;

function -- 函數

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

函數里面的內容和shell程序形式上是一致的;不同之處就是,shell代碼可以直接被執行;而函數中的內容,不能獨立執行,只有被調用的時候才被執行;

函數是在shell程序的當前shell中運行的;

定義函數:

    函數是由兩部分組成:函數名稱+函數體(能夠實現獨立功能的shell語句塊)

    語法一:

        function func_name{

            函數體

        }

    語法二:

        func_name(){

            函數體

        }

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

函數的使用:

    函數在定義的時候,其函數體中包含的所有命令均不會被執行,只有函數被調用的時候,才會執行其中的命令語句;

    調用方式:通過直接給出函數名稱的方式調用;

有很多的函數是存放與專門用于保存函數的文件中,如果想要調用這樣的文件中保存的函數,使用source命令(.)加載文件,然后再以直接給出函數名稱的方式調用函數;

使用set命令可以查看所有當前shell中國生效的函數;

使用unset命令可以撤銷已經定義的函數;

函數的返回值:

    兩種返回值:

        函數的執行結果的返回值:

            1.在函數體中使用了echo或printf命令輸出結果;

            2.在函數體中某些命令輸出的結果;

        函數的狀態返回值:

            1.函數中最后一跳命令的執行狀態返回值;

            2.自定義退出狀態碼;

                return [n]

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

                    0:表示無錯誤返回

                    1-255:有錯誤返回

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

函數的聲明周期:

    從被調用開始,到遇到return命令或全部的語句執行完成為止;

函數的實參:

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

    在調用函數的時候,直接在函數名稱后面以空白字符分隔多個參數即可;

    比如: 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

    傳遞給函數的位置參數,是調用函數的時候,函數名稱后面的有空白字符分隔的字符串序列;跟腳本的位置參數不是一回事;

變量:

    shell中的變量為弱變量

        1.無需事先聲明

        2.無需指定變量類型,默認為字符型

    變量分類:

        環境變量: 當前shell及子shell

        本地變量: 當前shell

        局部變量: local VAR_NAME=VALUE當前函數體

        位置變量:

        特殊變量:

建議:手動銷毀自己定義或聲明的所有變量;

函數的遞歸調用

    簡單來說,就是在函數體中調用函數自身;

例:階乘: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




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广南县| 静安区| 南木林县| 美姑县| 汶川县| 福贡县| 吴川市| 崇左市| 宜兴市| 乡宁县| 赞皇县| 东平县| 三江| 驻马店市| 平遥县| 金门县| 北流市| 新平| 密山市| 瑞丽市| 天津市| 桐庐县| 武陟县| 西昌市| 浦北县| 柳州市| 新乡市| 项城市| 慈利县| 从江县| 泸定县| 屏南县| 盱眙县| 东港市| 图木舒克市| 开原市| 赤城县| 晴隆县| 沈阳市| 理塘县| 虹口区|