组合条件测试:在多个条件间实现逻辑运算
与:[ condition1 -a condition2 ]、condition1 && condition2
或:[ condition1 -o condition2 ]、condition1 || condition2
非:[ -not condition ]、[ ! condition ]
1.整型测试(整数比较)
运算符 描述 示例
num1 -gt num2 大于 [ $num -gt 100 ]
num1 -lt num2 小于 [ $num -lt 100 ]
num1 -ge num2 大于等于 [ $num -ge 100 ]
num1 -le num2 小于等于 [ $num -le 100 ]
num1 -eq num2 等于 [ $num -eq 100 ]
num1 -ne num2 不等于 [ $num -ne 100 ]
2.字符测试(字符串比较)
运算符 描述 示例
test "${String1}" \> "${String2}"
String1 > String2 如果字String1大于String2,则为真 [ "${String1}" \> "${String2}" ]
[[ "${String1}" > "${String2}" ]]
test "${String1}" \
String1
[[ "${String1}"
test "${String1}" =="${String2}"
String1 == String2 如果字String1等于String2,则为真 [ "${String1}" =="${String2}" ]
[[ "${String1}" =="${String2}" ]]
test "${String1}" !="${String2}"
String1 != String2 如果字String1不等于String2,则为真 [ "${String1}" !="${String2}" ]
[[ "${String1}" !="${String2}" ]]
-n String 如果String长度为零,则为真 [ -n "${myvar}"]
-z String 如果String长度为非零,则为真 [ -z "${myvar}" ]
注意:
字符串必须用单引号或双引号引起来,有变量必须用双引号。
test与[]是shell命令,所以字符串比较操作符“"必须转义。
3.文件测试(判断文件是否存在及其属性)
参数 描述 示例
-e 文档存在则为真,同-a [[ -e /tmp ]]
-f 文档存在且为普通文件则为真 [[ -f /etc/passwd ]]
-d 文档存在且为目录则为真 [[ -d /tmp ]]
-L 文档存在且为符号链接为件则为真,同h [[ -L /dev/stdin ]]
-b 文档存在且为块设备则为真 [[ -b /dev/xvda ]]
-c 文档存在且为字符设备则为真 [[ -c /dev/zero ]]
-S 文档存在且为套接字文件则为真 [[ -S /dev/log ]]
-p 文档存在且为命令管道则为真 [[ -p /var/run/autofs.fifo-net ]]
-s 文档存在且为非空文件则为真 [[ -s /etc/passwd ]]
-r 文档存在且具有可读权限则为真 [[ -r /etc/passwd ]]
-w 文档存在且具有可写权限则为真 [[ -w /etc/passwd ]]
-x 文档存在且具有可执行权限则为真 [[ -x /etc/init.d/dhcpd ]]
-u 文档存在且具有SUID属性则为真 [[ -u a.txt ]]
-g 文档存在且具有SGID属性则为真 [[ -g a.txt ]]
-nt file1的mtime新于file2则为真 [[ a.txt -nt b.txt ]]
-ot file1的mtime旧于file2则为真 [[ a.txt -ot b.txt ]]
综合示例:
例1:如果当前主机名为空或者为“localhost”,则将其修改为chenss
#!/bin/bash
#
host_name=$(hostname)
[ -z "${host_name}" -o "${host_name}" == "localhost" ] && hostname chenss
例2:执行脚本,提示输入用户名,如果无此用户,则报错且继续提示输入用户名;如果UID等于0,则提示是root用户;如果大于0小于500,则提示是系统用户;否则,提示是普通用户。
#!/bin/bash
#
until [ "${user_name}" == "q" -o "${user_name}" == "quit" ] ; do
read -p "PLS enter a username: " user_name
user_id=$(id -u ${user_name})
if ! id -u ${user_name} &> /dev/null; then
continue
elif [[ ${user_id} -eq 0 ]] ; then
echo "It's a root user."
elif [ ${user_id} -gt 0 -a ${user_id} -lt 500 ]; then
echo "It's a system user."
else
echo "It's a common user."
fi
done
例3:添加10个用户,如果用户存在,则显示有此用户并把用户名标红,如果不存在,则添加并把用户名背景色标绿,且显示一共添加了多少用户。
#!/bin/bash
#
declare -i num=0
for i in {1..10}; do
if id -u test$i &> /dev/null; then
echo -e "user 33[0;31;1mtest$i33[0m is exists."
else
useradd test$i && echo -e "33[0;42;1mtest$i33[0m add succesfully."
let num++
fi
done
echo "Total add $num users."
原创文章,作者:老鼠上了猫,如若转载,请注明出处:http://www.178linux.com/7166