linux 脚本条件,shell脚本之条件测试

组合条件测试:在多个条件间实现逻辑运算

与:[ 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值