2.8-bash環境配置及腳本
bash的配置文件
按生效範圍劃分:存在兩類
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
個人配置:
~/.bash_profile
~/.bashrc
按功能劃分,存在兩類:
profile類:為交互式登錄的shell提供配置
全局:/etc/profile,/etc/profile.d/*.sh
個人:~/.bash_profile
功用:
1.用於定義環境變量
2.運行命令或腳本
bashrc類:為非交互式登錄的shell提供配置
全局:/etc/bashrc
個人:~/.bashrc
功用:
1.定義命令別名
2.定義本地變量
shell登錄:
交互式登錄:
1.直接通過終端輸入賬號密碼登錄
2.使用"su - username"或"su -l username"切換的用戶
讀取順序
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登錄:
1.su username
2.圖形界面下打開的終端
3.執行腳本
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
編輯配置文件定義的新配置的生效方式:
1.重新啟動shell進程
2.使用source或.命令進程
Note:使用source或.執行會有些副作用,比如設定在~/.bash_profile中的個人環境變量會重復賦值
bash中的算數運算
+,-,*,/,%,**......
# help let
實現算術運算:
1.let var=算式表達式
2.var=$[算術表達式]
3.var=$((算術表達式))
4.var=$(expr arg1 arg2...)
乘法符號須轉義 例如:mul=$(expr $num1 \* $num2)
bash有內建的隨機數生成器:$RANDOM(生成1-32767的隨機數)
增強型賦值:
+=,-=,*=,/=,%=
let varOPERvalue
例如:
count=$[$count+1]可以寫成let count+=1或count++
自增,自減
let var+=1
let var++
let var-=1
let var--
練習1:寫一個腳本
計算/etc/passwd文件中的第10個用戶和第20個用戶的ID之和
練習2:寫一個腳本
傳遞兩個文件路徑路徑作為參數給腳本,計算這兩個文件中所有空白行之和
練習3:統計/etc,/var,/usr目錄共有多少個一級子目錄和文件
條件測試:
判斷某需求是否滿足,需要由測試機制來實現:
Note:專用的測試表達式需要由測試命令輔助完成測試過程
測試命令:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
Note:EXPRESSION前後必須有空白字符
bash的測試類型:
數值測試:
-gt:是否大於
-ge:是否大於等於
-eq:是否等於
-ne:是否不等於
-lt:是否小於
-le:是否小於等於
字符串測試:
==/=:是否等於
>:是否大於
<:是否小於
!=:是否不等於
=~:左側的字符串是否能夠被右側的PATTERN所匹配到
Note:此表達式一般用於[[ ]]中
-z "STRING":測試字符串是否為空,空則為真,不空則為假
-n "STRING":測試字符串是否不空,不空為真,空則為假
Note:用於字符串比較時用到的字符串要使用引號
bash自定義退出狀態碼
exit [n]:自定義退出狀態碼
註意1:腳本中一旦遇到exit命令,腳本會立即終止,終止退出狀態取決於exit命令後面的數字
註意2:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼取決於腳本中執行的最後一條命令的狀態碼
練習:寫一個腳本
接受一個文件路徑作為參數:
如果參數個數小於1,則提示用戶“至少應該給一個參數”,並立即退出
如果參數不小於1,則顯示第一個參數所指向的文件的空白行數
2.8-bash環境配置及腳本