一、条件判断
格式: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例程:1加到100
ls *.tar.gz > tar.log
for i in $(cat tar.log)
do
tar -zxf $i &> /dev/null
done
rm -rf tar.log
#!/bin/bashs=0for ((i=1;i<=100;i=i+1)) do s=$(($s+$i))doneecho "$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/bash5、while循环
for i in $(cat /etc/passwd | grep /bin/bash | grep -v root)
do
userdel $i
done
语法:
while [ 条件判断式 ]
do
程序
done
6、until循环
语法: 是在条件不成立时执行
until [ 条件判断式 ]
do
程序
done