第六課 bash編程入門之變量、條件判斷、條件測試和for循環等

課程內容:
shell

    一、bash編程入門之變量類型、for循環和算術計算
express

    二、bash編程入門之邏輯運算和條件判斷
編程

    三、bash條件測試
bash

    四、bash條件測試
ide


1、bash編程入門之變量類型、for循環和算術計算測試

    bash弱類型:ui

    變量=值(任何無需事先聲明,可直接使用;值默認都是字符型 a=abc a=3)this

            普通賦值:a=4   spa

            加強性賦值:命令行

                字符: a=$[$a+1]  +=、-=、*=、/=、%=    a=$a+1 等同於a+=1

                字符串: export PATH=$PATH:/usr/local/bin

                自加:var++ 、var--

            unset 撤銷變量賦值(不然一直佔用內存)

    算術運算:bash會對數字執行隱式的類型轉換

            let VAR_NAME=Integer_value  定義整型

            declare -i Var_name=Integer_value 定義整型

         操做符:+ - * / %(取模) **(次方) 雙目運算符(須要至少2個操做數)

    算術運算的方式:

        let Var_Name=expression

        Var_Name=$[expression]

        $((expression)) 如:echo 「the sum is: $(($sum1+$sun2))」


    for循環:

        新建10個用戶:tuser601-yuser610

        for username in ;do

            useradd $username

        done

        遍歷list元素,遍歷結束,循環退出。

        #for i in `seq 601 610`; do echo $i;done

        #for i in `seq 601 610`; do echo user$i;done

        #for i in `seq 601 610`; do useradd tuser$i;done

        #for i in {601..610};do useradd tuser$i;done

    bash中的字串鏈接方式:

        #strl='hello'  #str2='bash'

        #echo "$str1 $str2"  結果爲:hello bash

        #echo '$str1 $str2'  結果爲:$hello $bash


        #animal=pig  變量引用後方跟直接字串時,變量名要加{} 

        #echo "there are some ${ainimal}s"  顯示There are some pigs. #{}指定變量範圍


        求100之內全部正整數的和:

        分析:聲明一個變量賦值爲0,而後讓該變量加1,再加2,再加3…………加100,加到最後就是咱們問題所要的結果。

        declare -i sum=0

        for i in {i..100};do

            let sum+=$i

        done

        echo $sum

    練習:分別計算100之內全部偶數之和奇數之和;

        #!/bin/bash

        declare -i evensum=0

        declare -i oddsum=0

        for i in `seq 1 2 100`;do

            oddsum=$[$oddsum+$i]

        done

        for i in `seq 1 2 100`;do

            evensum=$[$evensum+$i]

        done

        echo "evensum: $evensum,oddsum:$oddsum."

    練習:計算當前系統上全部用戶的ID之和

        #!/bin/bash

        declare -i idsum=0

        for i in `cut -d: -f3 /etc/passwd`;do

            let idsum+=$i 或者 idsum=$[$idsum+$userid]

        done

        echo $idsum

    練習:新建10個用戶user401-410,並求他們的ID之和

    練習:寫一個腳本,

        一、建立用戶user501-510

        二、建立目錄/tmp/dir-當前日期時間

        三、在/tmp/dir-當前日期時間目錄中建立10個空文件file101-110

        四、將file101的屬主改爲user501,一次類推。  

    練習:寫一個腳本

        一、腳本能夠接受一個以上的文件路徑做爲參數;

        二、顯示每一個文件所擁有的行數;

        三、顯示本次共對多少個文件執行了行數統計;

        四、顯示全部文件的總行數;


        #!/bin/bash

        #

        declare -i totalLines=0

        declare -i noFiles=0

        for file in $*; do

    curFileLines=`wc -l $file | cut -d' ' -f1`

    echo "$file has $curFileLines."

    let noFiles++

         let totalLines+=$curFileLines

        done

        echo "Total Files: $noFiles."

        echo "Total Lines: $totalLines."

    練習:新建10個用戶tuser401-tuser410,並求他們的ID之和;

        #!/bin/bash

        #

        declare -i idsum=0

        for i in {401..410}; do

           useradd tuser$i

           userID=`id -u tuser$i`

           let idsum+=$userID

        done

        echo "ID sum: $idsum."

    練習:寫一個腳本

        一、建立用戶tuser501-tuser510; 

        二、建立目錄/tmp/dir-當前日期時間;

        三、在/tmp/dir-當前日期時間 目錄中建立9個空文件file101-file110

        四、將file101的屬主改成tuser501,依次類推,一直將file110的屬主改成tuser510;

    練習:寫一個腳本

        分別統計/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/inittab文件中以#            開頭的行的行數和空白行數;

        #!/bin/bash

        for file in /etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions /etc/inittab; do

           echo "The lines contain #  in $file is `grep -E "^#" $file | wc -l`." 

           echo "The space lines in $file is `grep -E "^[[:space:]]*$" $file | wc -l`." 

        done

    練習:寫一個腳本

        顯示當前系統上全部默認shell爲bash的用戶的用戶名、UID及其全部此類用戶的UID之和;

        #!/bin/bash

        #

        grep "/bin/bash$" /etc/passwd | cut -d: -f1,3

        declare -i sum=0

        for userID in `grep "/bin/bash$" /etc/passwd | cut -d: -f3`; do

        let sum+=$userID

        done

        echo "$sum"


2、bash編程入門之邏輯運算和條件判斷

    一、邏輯運算:布爾運算:2種狀態真、假

        與、或、非、異或        

        與運算:

            真,假:

                    真 && 真 = 真

                    真 && 假 = 假

                    假 && 真 = 假

                    假 && 假 = 假

        或運算:

            真,假

                    真 || 真 = 真

                    真 || 假 = 真

                    假 || 真 = 真

                    假 || 假 = 假

        非運算:

            真,假

        異或運算:

        命令都有其狀態返回值:(成功:0,真    失敗:1-255, 假)


bash條件測試:

命令執行成功與否即爲條件測試

test EXPR

[ EXPR ]

` EXPR `


比較運算:

>, <, >=, <=, ==, !=


測試類型:根據比較時的操做數的類型

整型測試:整數比較

字符測試:字符串比較

文件測試:判斷文件的存在性及屬性等


注意:比較運算一般只在同一種類型間進行


整型測試:

-gt: 例如 [ $num1 -gt $num2 ]

-lt: 

-ge: 

-le:

-eq:

-ne:


字符串測試:

雙目

>: [[ "$str1" > "$str2" ]]

<:

>=

<=

==

!=


單目:

  -n String: 是否不空,不空則爲真,空則爲假

  -z String: 是否爲空,空則爲真,不空則假


過程式編程:

順序

選擇

循環:for


選擇:if和case


if: 三種使用格式

單分支的if語句

if 測試條件; then

    選擇分支

fi

表示條件測試狀態返回值爲值,則執行選擇分支;

if ! id $username &> /dev/null; then

useradd $username

fi

練習:寫一個腳本,接受一個參數,這個參數是用戶名;若是此用戶存在,則顯示其ID號;


雙分支的if語句:

if 測試條件; then

        選擇分支1

else

選擇分支2

fi

        兩個分支僅執行其中之一。


        練習:經過命令行傳遞兩個整數參數給腳本,腳本能夠返回其大者。


練習:經過命令行傳遞任意個整數給腳本,腳本能夠返回其大者。


練習:經過命令行給定一個文件路徑,然後判斷:

若是此文件中存在空白行,則顯示其空白行的總數;

不然,則顯示無空白行;

if grep "^[[:space]]*$" $1 &> /dev/null; then

echo "$1 has $(grep "^[[:space]]*$" $1 | wc -l) blank lines."

else

echo "No blank lines"

fi


注意:若是把命令執行成功與否看成條件,則if語句後必須只跟命令自己,而不能引用。


if [ $(grep "^[[:space:]]*$" $1 | wc -l) -lt 1 ]


多分支的if語句:

if 條件1; then

分支1

elif 條件2; then

分支2

elif 條件3; then

分支3

...

else

分支n

fi

練習:傳遞一個參數給腳本:

若是參數爲quit,則顯示說你要退出;

若是參數爲yes,則顯示說你要繼續

其它任意參數,則說沒法識別;


練習:傳遞一個用戶名給腳本:

若是此用戶的id號爲0,則顯示說這是管理員

若是此用戶的id號大於等於500,則顯示說這是普通用戶

不然,則說這是系統用戶;


#!/bin/bash

#

if [ $# -lt 1 ]; then

    echo "Usage: `basename $0` username"

    exit 1

fi


if ! id -u $1 &> /dev/null; then

    echo "Usage: `basename $0` username"

    echo "No this user $1."

    exit 2

fi


if [ $(id -u $1) -eq 0 ]; then

echo "Admin"

elif [ $(id -u $1) -ge 500 ]; then

echo "Common user."

else

        echo "System user."

fi


if 測試條件; then

測試條件:在bash中是命令 (test EXPR, [ EXPR ] ) 或由 ` EXPR `

if 命令;

在bash運行至if時,其後的命令會被執行,其狀態結果則做爲判斷標準:

0:表示真

1-255:表示假

若是條件包含比較之意,則必須使用自定義shell進程的狀態返回值:exit [n]












3、條件測試

相關文章
相關標籤/搜索