shell中最基礎的東西像history,檔案/數字等測試,如何執行一個腳本等,這次主要是介紹一些稍微深入的内容。
比如test測試,if條件語句,for循環,while循環,case語句,自定義函數等,希望對大家有幫助,大家多提意見。。。。。
一.條件測試操作
1. test指令

用途:測試特定的表達式是否成立,當條件成立時,指令執行後的傳回值為0,否則為其他數值
格式:test 條件表達式
[ 條件表達式 ]
常見的測試類型 : 測試檔案狀态 字元串比較 整數值比較 邏輯測試
1) 測試檔案狀态
格式:[ 操作符 檔案或目錄 ]
c.常用的測試操作符
-d:測試是否為目錄(Directory)
-e:測試目錄或檔案是否存在(Exist)
-f:測試是否為檔案(File)
-r:測試目前使用者是否有權限讀取(Read)
-w:測試目前使用者是否有權限寫入(Write)
-x:測試目前使用者是否可執行(Excute)該檔案
-L:測試是否為符号連接配接(Link)檔案
[ -e /etc/sysconfig/ ] && echo "yes"
2) 整數值比較
格式:[ 整數1 操作符 整數2 ]
常用的測試操作符
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
3) 字元串比較
格式:[ 字元串1 = 字元串2 ]
[ 字元串1 != 字元串2 ]
[ -z 字元串 ]
常用的測試操作符
=:字元串内容相同
!=:字元串内容不同,! 号表示相反的意思
-z:字元串内容為空
4) 邏輯測試
a) 格式:[ 表達式1 ] 操作符 [ 表達式2 ] ...
-a或&&:邏輯與,“而且”的意思
p 前後兩個表達式都成立時整個測試結果才為真,否則為假
-o或||:邏輯或,“或者”的意思
二.if條件語句
1.單分支:
如果/boot分區的空間使用超過80%,輸出報警資訊
#!/bin/bash
RATE=`df -hT | grep "/boot" | awk '{print $6}' | cut -d "%" -f1 `
if [ $RATE -gt 80 ]
then
echo "Warning,DISK is full!"
fi
2. 雙分支
當“條件成立”、“條件不成立”時執行不同操作
例子:判斷sshd是否在運作,若已運作則輸出提示資訊,否則重新啟動sshd服務
service sshd status &> /dev/null
if [ $? -eq 0 ]
echo "mysqld service is running."
else
/etc/init.d/sshd restart
3. 多分支
三.for循環語句
根據變量的不同取值,重複執行一組指令操作
例子1:依次輸出3條文字資訊,包括一天中的“Morning”、“Noon”、“Evening”字串
for TM in "Morning" "Noon" "Evening"
do
echo "The $TM of the day."
done
例子2:
DIR="/opt"
LMT=100
ValidUsers=`grep "/bin/bash" /etc/passwd | cut -d ":" -f 1`
for UserName in $ValidUsers
Num=`find $DIR -user $UserName | wc -l`
if [ $Num -gt $LMT ] ; then
echo "$UserName have $Num files."
四.while循環語句
應用示例1:
批量添加20個系統使用者帳号, 使用者名依次為“stu1”、“stu2”、……、“stu20”
i=1
while [ $i -le 20 ]
useradd stu$i
echo "123456" | passwd --stdin stu$i &> /dev/null
i=`expr $i + 1`
應用示例2:删除剛建立的20個帳戶
userdel -r stu$i
五.case多重分支語句
根據變量的不同取值,分别執行不同的指令操作
echo -n "please inset some keys:"
read AA
case $AA in
[a-z]|[A-Z])
echo "they are letters"
;;
[0-9])
echo "they are number"
*)
echo "they are other words"
esac
六.until循環語句
until語句根據條件執行重複操作,與while循環正好相反
七.shift遷移語句
用于遷移位置變量,将 $1~$9 依次向左傳遞
例如,若目前腳本程式獲得的位置變量如下:
p $1=file1、$2=file2、$3=file3、$4=file4
則執行一次shift指令後,各位置變量為:
p $1=file2、$2=file3、$3=file4
再次執行shift指令後,各位置變量為:
p $1=file3、$2=file4
Result=0
while [ $# -gt 0 ]
Result=`expr $Result + $1`
shift
echo "The sum is : $Result"
八.循環控制語句
1. break語句:在for、while、until等循環語句中,用于跳出目前所在的循環體,執行循環體後的語句
2. continue:在for、while、until等循環語句中,用于跳過循環體内餘下的語句,重新判斷條件以便執行下一次循環
九.Shell函數應用
Shell函數概述
在編寫Shell腳本程式時,将一些需要重複使用的指令操作,定義為公共使用的語句塊,即可稱為函數
合理使用Shell函數,可以使腳本内容更加簡潔,增強程式的易讀性,提高執行效率
1. 定義新的函數,兩種方法:
方法一:
function 函數名 {
指令序列
}
方法二:
函數名() {
2. 例子
在腳本中定義一個加法函數,用于計算2個整數的和
調用該函數計算(12+34)、(56+78)的和
adder() {
echo `expr $1 + $2`
adder 12 34
adder 56 789