shell編程筆記一,shell編程筆記
shell編程:
bash變數類型:
環境變數
本地變數(局部變數)
位置變數
特殊變數(內建)
本地變數:
varname=value:範圍為整個bash進程可以使用;
變數命名規範:
1. 只能含字母、數字和底線,並且以字母和底線開頭
2. 最好不要跟系統已有的環境變數重名
3. 見名知意
局部變數:
local varname=value:範圍為當前程式碼片段;
環境變數:範圍為當前shell進程及其子進程,不能影響到其父進程;
export varname=value “匯出”,如果變數已經定義可以只是用變數名 export varname,即
1. export varname=value
2. varname=value
export varname
指令碼在執行命令時會啟動一個子shell環境變數:
系統自動執行的指令碼(非命令列啟動)就需要自我定義需要的個環境變數;
位置變數:
$1,$2,$3,……
特殊變數:
$?:上一個命令執行狀態的返回值:
程式執行可能有兩種返回值:
1. 程式執行結果
2. 程式狀態返回嗎(0-255)
0 則為執行正確
1-255 則執行出錯(1,2,127系統預留);
bash:
引用變數:${varname},括弧可以省略
撤銷變數:
unset varname
查看當前shell中的變數:
set
包括環境變數和本地變數
查看當前shell中的環境變數:
1. printenv
2. env
3. export
條件判斷:
如果使用者不存在:
添加使用者,給密碼並顯示添加成功;
否則
顯示使用者已經存在,沒有添加;
bash中條件判斷:
條件測試類型:
1. 整數測試
2. 字元測試
3. 檔案測試
條件測試的運算式:
1. [ expression ]
2. [[ expression ]]
3. test expression
整數比較:
-eq:測試兩個整數是否相等;比如 $A -eq $B,如果A與B變數的值相等,則返回0,否則返回非0值
-ne:測試兩個整數是否不等;相等為假,不等為真
-gt: 測試一個數是否大於另一個數;大於為真,否則為假
-lt: 測試一個數是否小於零一個數;小於為真,否則為假
-ge:測試一個數是否大於或等於另一個數;大於或等於為真,否則為假
-le: 測試一個數是否小於或等於另一個數;小於或等於為真,否則為假
命令間的邏輯關係:
邏輯與:&&
第一個條件為假時,第二個條件不會被執行
第一個條件為真時,第二個條件會被執行,作為結果
邏輯或:||
第一個條件為真時,第二個條件不會執行,結果為真
第一個條件為假時,第二個條件會被執行,作為結果
1.單分支的if語句:
if 判斷條件; then
statement1
statement2
……
fi
2. 雙分支的if語句:
if 條件判斷; then
statement1
statement2
……
else
statement1
statement2
……
fi
如果then與if不在同一行,則“;”可以省略,如果在同一行,則不可省略。fi必須獨佔一行
如果使用者存在,就顯示使用者已存在;否則,就添加此使用者
id user1 && echo "user1 exist" || useradd user1
如果使用者不存在,就添加;否則顯示其已經存在
! id user1 && useradd user1 || echo "user1 exists."
如果使用者不存在,就添加並設定密碼,否則,顯示其已經存在:
! id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists."
shell指令碼練習:
練習一要求:
1. 添加5個使用者,user1, user2, ……, user5;
2. 每個使用者的密碼同使用者名稱,且要求,添加密碼完成後不顯示passwd命令的執行結果資訊;
3. 最後顯示當前系統上一共有多少個使用者;
#useradd user1
#echo "user1" | passwd --stdin user1 &> /dev/null
#echo "Add user1 successfully."
! id user1 &> /dev/null && useradd user1 && echo "user1" | passwd --stdin user1 &> /dev/null || echo "user1 exists."
! id user2 &> /dev/null && useradd user2 && echo "user1" | passwd --stdin user2 &> /dev/null || echo "user2 exists."
! id user3 &> /dev/null && useradd user3 && echo "user1" | passwd --stdin user3 &> /dev/null || echo "user3 exists."
! id user4 &> /dev/null && useradd user4 && echo "user1" | passwd --stdin user4 &> /dev/null || echo "user4 exists."
! id user5 &> /dev/null && useradd user5 && echo "user1" | passwd --stdin user5 &> /dev/null || echo "user5 exists."
USERS=`wc -l /etc/passwd | cut -d: -f1`
echo "$USERS users"
練習二要求:
給定一個使用者,如果其UID為0,就顯示此為管理使用者;否則,就顯示其為普通使用者;
NAME=user1
USERID=`id -u $NAME`
[ $USERID -eq 0 ] && echo "root" || echo "common user."
算數運算:
A=4
B=4
1. let 算數運算運算式
let C=$A+$B
2. $[算數運算運算式]
C=$[$A+$B]
3. $((算術運算運算式))
C=$(($A+$B))
4. expr 算數運算運算式,運算式中各運算元及運算子之間要有空格,而且要使用命令引用
C=`expr $A + $B`
bash -n filename:測試指令碼檔案是否有語法錯誤
bash -x filename:顯示執行的每一步