【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?判斷條件;thenstatement1statement2 elif????statement3statement4???? elsestatement5statement6 fi????2.判斷命令執行結果返回值還是判斷命令執行狀態返回值
????????命令執行結果返回值:命令執行的返回值
????????命令執行狀態返回值:只有兩個結果,一個是0表示執行成功,非0表示執行失敗,使用$?可以查看改值。
????????舉例:該處的判斷條件判斷的是命令執行狀態返回值
#!?/bin/bash if?id?user2?&>?/dev/null;thenecho?"user1存在!" elseecho?"user1不存在!" fi七、練習
????1.給出一個用戶名,判斷該用戶是管理員還是普通用戶
#!?/bin/bash NAME=kdyzm USERID=`id?-u?$NAME` if?[?$USERID?-eq?0?]?;thenecho?"Admin?User" elseecho?"Common?User" fi????2.編寫一個腳本,判斷是否有用戶的默認shell為bash,如果有,則顯示有多少個這類用戶,否則就顯示沒有這類用戶。
#!?/bin/bash USERS=`grep?"bash$"?/etc/passwd?|?wc?-l` if?[?$USERS?-eq?0?]?;thenecho?"沒有默認shell為bash的用戶存在!" elseecho?"使用bash為默認shell的用戶數量為:$USERS" fi????
轉載于:https://blog.51cto.com/kdyzm/1740334
總結
以上是生活随笔為你收集整理的【Linux学习009】脚本编程之变量、条件测试和条件判断的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业文化和价值观
- 下一篇: linux内核分析作业3:跟踪分析Lin