条件测试语法
格式1:test 条件表达式
格式2:[ 条件表达式 ]
格式3:[[ 条件表达式 ]]
(1)文件 :判断文件或目录是否存在;返回命令执行结果$?
-e:可以同时对文件或目录是否存在进行判断
-f :判断文件是否存在
-d 判断目录是否存在
-r :判断当前用户对该文件是否有读权限
test -d /home
! test -d /home
test -f /etc/hosts
! test -f /etc/hosts
[ -d /home ]
[ ! -d /test ] && mkdir /test
[ -d /test ] || mkdir /test
(2)数字比较:
-eq :等于
-ge :大于等于
-gt :大于
-le :小于等于
-lt :小于
-ne :不等于
[ $UID -eq 0 ]
[ $UID -ne 0 ]
[ 1 -gt 10 ]
#!/bin/bash
disk=$(df -h | grep "/$" | awk '{print $(NF-1) }' | awk -F '[%]' '{print $1}')
if [ $disk -ge 5 ];then
echo "disk is warning!!!"
fi
(3)字符串比较
提示:字符串进行比较两边变量都使用双引号
-z :如果变量长度为0,返回0值
-n:如果变量长度为0,返回非0值
[ "$USER" = "root" ] ;echo $?
[ "$USER" == "root" ] ;echo $?
[root@localhost scripts]# var=""
[root@localhost scripts]# echo ${#var}
0
[root@localhost scripts]# [ -z "$var" ];echo $?
0
[root@localhost scripts]# [ -n "$var" ];echo $?
1
(4)连接符:
-a:两边条件都成立,在表达式[]中使用
-o:两边条件任意为真就为真,在表达式[]中使用
&& :两边条件都成立,在表达式[[]]中使用
||:两边条件任意为真就为真,在表达式[[]]中使用
[ 1 -gt 2 -a 2 -le 3 ];echo $?
1
[ 1 -gt 2 -o 2 -le 3 ];echo $?
0
[[ 1 -gt 2 && 2 -le 3 ]];echo $?
1
[[ 1 -gt 2 || 2 -le 3 ]];echo $?
0
(5)条件比较例子
#!/bin/bash
#################################################
#useradd #
#v1.0 by love-linux at 00/00/0000
################################################
read -p "please input number:" num
if [[ ! "$num" =~ ^[0-9]+$ ]];then
echo "error number"
exit
fi
read -p "please input prefix:" prefix
if [ -z $prefix ];then
echo "error prefix"
exit
fi
for i in $(seq 1 $num)
do
user=$prefix$i
useradd $user &>/dev/null
if [ $? -eq 0 ];then
echo "user $user is success created"
else
echo "user $user already exist"
continue
fi
echo "123" | passwd --stdin $user &>/dev/null
done
#!/bin/bash
#################################################
#useradd #
#v1.0 by love-linux at 00/00/0000
################################################
read -p "please input number:" num
while true
do
if [[ ! "$num" =~ ^[0-9]+$ ]];then #判断用户输入的是否是数字,[[]] 支持正则,=~ ^[0-9]+$可以判断用户输入的是否是数字
echo "error number"
read -p "please input number:" num
else
break
fi
done
read -p "please input prefix:" prefix
while true
do
if [ -z $prefix ];then #判断用户输入的字符串是否为空,为空继续输入,不为空退出循环
echo "error prefix"
read -p "please input prefix:" prefix
else
break
fi
done
for i in $(seq 1 $num)
do
user=$prefix$i
useradd $user &>/dev/null
if [ $? -eq 0 ];then
echo "user $user is success created"
else
echo "user $user already exist"
continue
fi
echo "123" | passwd --stdin $user &>/dev/null
done