【Linux學習009】腳本編程之變量、條件測試和條件判斷

一、Bash環境變量

bash中變量有四種種類型:環境變量、本地變量(局部變量)、位置變量、特殊變量。

1.環境變量

環境變量作用範圍最廣,所有子bash進程都能夠訪問環境變量中的值,定義環境變量的方法是使用export關鍵字。舉例:

kdyzm@kdyzm:~$ export A=abc
kdyzm@kdyzm:~$ echo $A
abc
kdyzm@kdyzm:~$

 2.本地變量

本地變量作用範圍是當前bash,子bash訪問不到父bash中定義的變量,定義本地變量的方法是 VARNAME=value。舉例:

kdyzm@kdyzm:~$ B=cde
kdyzm@kdyzm:~$ echo $B
cde
kdyzm@kdyzm:~$

局部變量是本地變量的一種特殊形式,作用域更小,它只能在方法中使用,使用關鍵字local定義。

 3.位置變量

位置變量的作用類似於正則表達式中的後項引用,正則表達式中使用"\n"來引用,這裏使用"$n"來引用。

 4.特殊變量

特殊變量葉叫做“系統變量”,這種類別的變量是bash自己定義的變量,比如$?就是一種特殊變量(系統變量),它用來保存上一條命令的執行結果,0代表執行成功,其它(1-255)代表執行失敗

kdyzm@kdyzm:~$ ls /tmp
config-err-YXMEYj
fcitx-socket-:0orbit-kdyzm
sni-qt_sogou-qimpanel_1597-Mn3jk9
sogou-qimpanel:0.pid
sogou-qimpanel-cell
sogou-qimpanelkdyzm
systemd-private-251274e9dff14256aadaac748704e759-colord.service-Q7u1po
systemd-private-251274e9dff14256aadaac748704e759-rtkit-daemon.service-I81zdW
systemd-private-251274e9dff14256aadaac748704e759-systemd-timesyncd.service-SrkrjY
unity_support_test.0
kdyzm@kdyzm:~$ echo $?0kdyzm@kdyzm:~$ ls /templs: cannot access /temp: No such file or directory
kdyzm@kdyzm:~$ echo $?2kdyzm@kdyzm:~$

二、如何實現變量引用

使用${VARNAME}實現變量引用,其中大多數情況下{}能夠直接省略,不能省略的情況:

kdyzm@kdyzm:~$ ANIMAL=pig
kdyzm@kdyzm:~$ echo "there are some ${ANIMAL}s"
there are some pigs
kdyzm@kdyzm:~$

以上echo命令之後必須使用"",而不能使用'',這是因爲""是弱引用,變量能夠被解析,''是強引用,變量不能被解析。

kdyzm@kdyzm:~$ echo 'there are some ${ANIMAL}s'
there are some ${ANIMAL}s
kdyzm@kdyzm:~$

三、雜項

    1.如果腳本是在命令行中執行的,那麼該腳本能夠直接訪問當前shell定義的變量,但是如果是非命令行運行的腳本,就必須手動配置環境變量了。

    2./dev/null是一個數據黑洞,可以將不需要顯示的數據都重定向到這裏丟棄掉。

    3.使用unset命令能夠解除變量綁定,釋放內存空間。

    4.如何查看當前shell的環境變量

        使用printenv、env、export三個命令都能夠查看當前bash中的環境變量。

    5.如何運行一個腳本

        指定腳本的路徑,回車即可。需要注意的是如果腳本文件在當前路徑下,也需要指定./作爲當前路徑的標誌,否則直接使用文件名會提示找不到命令,原因就是命令行默認認爲你輸入的是命令,所以回到PATH路徑下找,結果沒找到,就會報錯。

kdyzm@kdyzm:~$ command.sh
command.sh: command not found
kdyzm@kdyzm:~$ ./command.sh 
Hello,World!

        注意創建腳本文件之後一定要加上“可執行”權限,因爲默認創建的文本文件是不可執行的。

chmod a+x ./command.sh

        如果不想給腳本文件加上可執行權限但是還想要執行該腳本的話,直接使用

bash FILE

        即可執行。

四、如何寫一個腳本

    在寫一個腳本之前必須指定“魔數”,指定魔數的作用就是告訴系統到哪裏去找“解析器”解析腳本內容,在使用bash的情況下,指定魔數的方法是:

#! /bin/bash

    接下來就是一些命令的堆砌,實際上腳本編程就是那麼簡單。

五、條件測試

    1.條件測試類型包括整數測試、字符測試、文件測試

    2.條件測試的三種命令

[ expression ]
[[ expression ]]    #}"[["是bash中的關鍵字,而[不是
test expression

    3.整數比較的操作符

-eq    #測試兩個數是否相等
-ne    #測試兩個書是否不想等
-lt    #小於比較測試
-gt    #大於比較測試
-le    #小於等於測試
-ge    #大於等於測試

    4.命令之間的邏輯關係

&&    #與關係
||    #或關係

六、條件判斷

    1.條件判斷的結構如下:

if 判斷條件;then
    statement1
    statement2
elif    
    statement3
    statement4    
else
    statement5
    statement6
fi

    2.判斷命令執行結果返回值還是判斷命令執行狀態返回值

        命令執行結果返回值:命令執行的返回值

        命令執行狀態返回值:只有兩個結果,一個是0表示執行成功,非0表示執行失敗,使用$?可以查看改值。

        舉例:該處的判斷條件判斷的是命令執行狀態返回值

#! /bin/bash
if id user2 &> /dev/null;then
        echo "user1存在!"
else
        echo "user1不存在!"
fi

七、練習

    1.給出一個用戶名,判斷該用戶是管理員還是普通用戶

#! /bin/bash
NAME=kdyzm
USERID=`id -u $NAME`
if [ $USERID -eq 0 ] ;then
        echo "Admin User"
else
        echo "Common User"
fi

    2.編寫一個腳本,判斷是否有用戶的默認shell爲bash,如果有,則顯示有多少個這類用戶,否則就顯示沒有這類用戶。

#! /bin/bash
USERS=`grep "bash$" /etc/passwd | wc -l`
if [ $USERS -eq 0 ] ;then
        echo "沒有默認shell爲bash的用戶存在!"
else
        echo "使用bash爲默認shell的用戶數量爲:$USERS"
fi

    



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章