shell条件测试
一:数值比较
[ 20 -gt 10 ] -gt大于
[ 1 -lt 10 ] -lt小于
[ 1 -eq 1 ] -eq等于
[ 1 -ne 10 ] -ne不等于
[ 20 -ge 10 ] -ge大于等于
[ 10 -le 10 ] -le小于等于
变量长度 ${#pass}
测试语法
格式1: test 条件表达式
格式2: [ 条件表达式 ]
格式3: [[ 条件表达式 ]]
二:文件测试 [ 操作符 文件或目录 ]
-f filename : 当filename 存在时返回真
-b filename : 当filename 存在并且是块文件时返回真(返回0)
-d pathname : 当pathname 存在并且是一个目录时返回真
-h filename : 当filename 存在并且是符号链接文件时返回真 (或 -L filename)
-c filename : 当filename 存在并且是字符文件时返回真
-e pathname : 当由pathname 指定的文件或目录存在时返回真
-g pathname : 当由pathname 指定的文件或目录存在并且设置了SGID 位时返回真
-k pathname : 当由pathname 指定的文件或目录存在并且设置了"粘滞"位时返回真
等
三:字符串比较 [ "字符串" = "字符串" ]
=,等于
!=,不等于
-z:判断字符长度是为0
-n: 判断字符长度不是为0
四:and 和 or
&& 逻辑的 AND 的意思, -a ,两个条件同时成立,为真。注意:&&调用正则时,请使用双中括号。
|| 逻辑的 OR 的意思, -o ,两个条件一个成立,为真。注意:||调用正则时,请使用双中括号。
流程控制if
if单分支语法:
if [ 判断条件,为真则执行then后面的 ] ; then
符合该条件执行的语句
fi
例如输入用户名,查询用户是否存在
#!/bin/bash
read -p"请输入用户名:" user #read -p 隐性定义变量
id $user &>/dev/null #查询输入的用户是否存在
if [ $? -eq 0 ] ; then #$?查看上一段程序的执行结果,成功返回为零,失败返回为1
echo "$user 存在"
fi
双分支结构
if 条件测试 ;then
命令序列
else
命令序列
fi
举上面那个例子,我现在查到存在的用户就不做什么了,如果不存在,我想让他自动创建这个用户
#!/bin/bash
read -p"请输入用户名:" user
id $user &>/dev/null
if [ $? -eq 0 ] ; then
echo "$user 存在"
else
useradd $user
echo "用户已创建完成"
fi
~
多分支结构
多分支结构
if 条件测试1
then 命令序列
elif 条件测试2
then 命令序列
elif 条件测试3
then 命令序列...
else 命令序列
fi
例如:在几点的时候判断当前是下午,中午,上午,还是晚上
#!/bin/bash
shijian=`date +%H` #声明变量,当前时间是几点
if [ $shijian -gt 6 -a $shijian -lt 11 ] ;then #当前时间大于6点小于11点是上午
echo "$shijian 是上午"
elif [ $shijian -gt 11 -a $shijian -lt 13 ] ;then
echo "$shijian 是中午"
elif [ $shijian -gt 13 -a $shijian -lt 19 ] ; then
echo "$shijian 是下午"
else
echo "$shijian 是夜晚"
fi
嵌套结构
if 条件测试1 then 命令序列
if 条件测试1 then 命令序列
else 命令序列
fi
else 命令序列
fi
模式匹配:case
case 变量 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
模式3)
命令序列3
;;
*)
无匹配后命令序列
;;
esac