一、條件判斷
格式:test [選項] file
或者 [(空格)條件判斷式(空格)] 注:不要忘記空格
1、按文件類型進行判斷
選項:-d:判斷文件是否存在,且是目錄文件時爲真
-e:判斷文件是否存在,存在時爲真
-f:判斷文件是否爲真,且爲普通文件時爲真
-b:判斷文件是否存在,且爲塊設備文件時爲真
-c:判斷文件是否存在,且爲字符設備時爲真
-L:判斷文件是否存在,且爲符號鏈接文件時爲真
-p:判斷文件是否存在,且爲管道文件時爲真
-s:判斷文件是否爲非空,非空時爲真
-S:判斷套接字文件是否存在,存在時爲真
例:[-e filename] 執行命令後echo $?查看若值爲0說明執行正確,文件存在
[-e filename] && echo yes || echo no
2、按文件權限進行判斷
-r:擁有讀權限時爲真
-w:擁有寫權限時爲真
-x:擁有執行權限時爲真
-u: 有SUID權限時爲真
-g:有SGID權限時爲真
-k:有SBit權限時爲真
3、兩個文件間比較
文件1 -nt 文件2 判斷文件1是否比文件2新,若新則爲真
文件1 -ot 文件2 判斷文件1是否比文件2舊,若舊則爲真
文件1 -ef 文件2 判斷文件1iNode節點號是否和文件2相同,(可用此判斷硬鏈接)
4、兩個整數間比較
整數1 -eq 整數2 判斷是否相等
整數1 -ne 整數2 判斷是否不相等
整數1 -gt 整數2 判斷是否大於
整數1 -ge 整數2 判斷是否大於等於
整數1 -lt 整數2 判斷是否小於
整數1 -le 整數2 判斷是否小於等於
5、字符串的判斷
-z 字符串 判斷字符串是否爲空
-n 字符串 判斷字符串是否爲非空
字符串1 == 字符串2 判斷是否相等
字符串1 != 字符串2 判斷是否不等
例:[ -z "$name"] $$ echo yes || echo no
6、多重條件判斷
判斷1 -a 判斷2 邏輯與,1和2都爲真最終結果才爲真
判斷1 -o 判斷2 邏輯或,1和2有一個爲真結果就爲真
!判斷 邏輯非
二、流程控制
1、單分支if語句
if [ 條件判斷式 ];then
程序
fi
或者:if [ 條件判斷式 ]
then
程序
fi
例程:判斷當前用戶是root
#!/bin/bash
test=$(env | grep USER | cut -d ":" -f2)
if ["$test" == "root"]
then
echo current user is root
fi
例程:判斷分區使用率
#!/bin/bash
test=$(df -h | grep /dev/sda5 | awk '{print $5}' | cut -d "%" -f1)
if [ $test -ge 80 ]
then
echo "sda5 is full"
fi
2、雙分支if語句
if [ 條件判斷語句 ]
then
程序
else
程序
fi
例程:判斷手動輸入的是不是目錄文件
#! /bin/bash
read -t 30 -p "please input num1:" num1
read -t 30 -p "please input num2:" num2
read -t 30 -p "please input operate:" ope
if [ -n "$num1" -a -n "$num2" -a -n "$ope" ]
then
test1=$(echo "$num1" | sed 's/[0-9]//g')
test2=$(echo "$num2" | sed 's/[0-9]//g')
if [ -z "$test1" -a -z "$test2" ]
then
if [ "$ope" == '+' ]
then
ans=$(($num1 + $num2))
elif [ "$ope" == '-' ]
then
ans=$(($num1 - $num2))
elif [ "$ope" == '*' ]
then
ans=$(($num1 * $num2))
elif [ "$ope" == '/' ]
then
ans=$(($num1 / $num2))
else
echo "error: input operate wrong"
exit 9
fi
else
echo "error: input is not a num"
exit 10
fi
else
echo "error: input num is null"
exit 11
fi
echo "$num1" "$ope" "$num2" = $ans"
3、多分支case語句
case $變量名 in
“值1”)
若等於值1,程序
;;
“值2”)
若等於值2,程序
;;
*)
若都不等於,程序
;;
esac
4、for循環
語法一:
for 變量名 in 值1 值2 值3 ...
do
程序
done
語法二:
for ((初始值;循環控制條件;變量變化))
do
程序
done
例程:批量解壓縮文件
#!/bin/bash
ls *.tar.gz > tar.log
for i in $(cat tar.log)
do
tar -zxf $i &> /dev/null
done
rm -rf tar.log
例程:1加到100#!/bin/bash
s=0
for ((i=1;i<=100;i=i+1))
do
s=$(($s+$i))
done
echo "$s"
例程:批量添加用戶
#!/bin/bash
read -t 30 -p "please input user name" name
read -t 30 -p "please input the numbers of users" num
read -t 30 -p "please input user passwd" pass
if [ -n "$name" -a -n "$num" -a -n "$pass" ]
then
y=$( echo $num | sed 's/[0-9]'//g )
if [ -z $y ]
then
for ((i=1;i<=$num;i=i+1))
do
/user/sbin/useradd $name$i $>/dev/null
echo $pass | /user/bin/passwd --stdin $name$i $>/dev/null
done
fi
fi
例程:批量刪除普通用戶
#!/bin/bash
for i in $(cat /etc/passwd | grep /bin/bash | grep -v root)
do
userdel $i
done
5、while循環
語法:
while [ 條件判斷式 ]
do
程序
done
6、until循環
語法: 是在條件不成立時執行
until [ 條件判斷式 ]
do
程序
done