11bash:条件判断

条件判断:
​ 条件测试的表达式:
​ [ expression ]
​ [[ expression ]]
​ test expression

​ 整数测试:
​ -eq:测试两个整数是否相等,相等为真,不等为假,比如 $A -eq $B
​ -ne:测试两个整数是否不等,不等为真,相等为假
​ -gt:测试一个数是否大于另一个数
​ -ls:测试一个数是否小于另一个数
​ -ge:大于或等于
​ -le:小于或等于

​ 字符测试:
​ $A == $B $A = $B
​ $A != $B

​ -n string:测试指定字符串是否为空
​ -s string:测试指定字符串是否不空

​ 文件测试:
​ -e FILE:测试文件是否存在
​ [ -e /etc/inittab ]

​ -f FILE:测试文件是否为普通文件
​ -d FILE:测试指定路径是否为目录
​ -r FILE:测试当前用户对指定文件是否有读取权限
​ -w FILE
​ -x FILE
​ [-x /etc/rc.d/rc.sysinit ]

​ 组合测试条件:
​ -a:与关系
​ -o:或关系
​ !:非关系

​ if [ $# -gt l -a $# -le 3 ]
​ if [ $# -gt 1 ] && [ $# -le 3 ]

命令的逻辑关系:
​ 逻辑与:&&
​ 逻辑或:||

如果user6不存在就添加user6
​ ! id user6 && useradd user6
​ id user6 || useradd user6

如果/etc/inittab文件的行数大于100,就显示好大的文件
​ [`wc -l /etc/inittab | cut -d ' ' -f 1` -gt 100] && echo "Large file"

如果用户存在,就显示用户已存在,否则就添加此用户
​ id user1 && echo "user1 exists." || useradd user1

如果用户不存在就添加,否则显示其存在
​ ! id user1 && useradd user1 || echo "user1 exists."

如果用户不存在,添加并且给密码,否则显示其已经存在
​ ! id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists"

变量名称:
​ 1,只能包含字母,数字和下划线并且不能以数字开头,
​ 2,不应该跟系统中已有的环境变量重名
​ 3,最好做到见名知义

bash变量的类型
​ 本地变量(局部变量)
​ 环境变量
​ 位置变量:
​ $1,$2,...

​ shift:轮替参数
​ 特殊变量:
​ $?:上一条命令的退出状态码
​ $#:参数的个数
​ $*:参数列表
​ $@:参数列表

条件判断控制结构:

​   if 判断条件;then
​       statement1
​       statement2
​       ...
​   fi

​   if 判断条件;then
​       statement1
​       statement2
        ...
​   else
​       statement3
​       statement4
​       ...
​   fi
​   if 判断条件1;then
​       statement1
​       ...
​   elif 判断条件2;then
​       statement2
​       ...
​   else
​       statement4
​       ...
​   fi

​ case语句,选择结构

​       case SWITCH in
​       value1)
​           statement
​           ...
​           ;;
​       value2)
​           statement
​           ...
​           ;;
​       *)
​           statement
​           ...
​           ;;;
​       esac

测试脚本是否有语法错误:
​ bash -n 脚本
​ bash -x 脚本 单步执行

给定一个用户,如果其UID为0,就显示此为管理员,否则显示为普通用户
​ NAME=user16
USERID=`id -u $NAME`
​ if [ $userid -eq 0 ];then
​ echo "Admin"
​ else
​ echo "common user."
​ fi

​ NAME=user16
​ if [ `id -u $NAME` -eq 0 ];then
​ echo "Admin"
​ else
​ echo "common user."
​ fi


给定一个用户,判断其UID与GID是否一样
如果一样就显示此用户为"good guy",否则就显示此用户为"bad guy"
USERNAME=user1
USERID=`id -u $USERNAME`
GROUPID=`id -g $USERNAME`
if [ $USERID -eq $GROUPID ];then
​ echo "Good guy."
else
​ echo "Bad guy."
fi

USERNAME=user1
if ! grep "^$USERNAME>" /etc/passwd &> /dev/null;then
​ echo "No such user: $USERNAME."
​ exit 1
fi

USERID=`grep "^$USERNAME>" /etc/passwd | cut -d:-f3`
GROUPID=`grep "^$USERNAME>" /etc/passwd | cut -d:-f4`
if [ $USERID -eq $GROUPID ];then
​ echo "Good guy."
else
​ echo "Bad guy."
fi

定义脚本退出状态码
​ exit:退出脚本
​ exit #
​ 如果脚本没有明确定义退出状态码,那么最后执行的一条命令的退出码即为脚本的退出状态码

圆整:丢弃小数点后的内容

给定一个用户,获取其密码警告期限
而后判断用户密码使用期限是否已经小于警告期限
计算方法:最长使用期限减去已经使用的天数即为剩余使用期限
W =`grep "student" /etc/shadow | cut -d: -f6`
S=`date +%s`
T=`expr $S/86400`
L=`grep "^student" /etc/shadow | cut -d: -f5`
N=`grep "^student" /etc/shadow | cut -d: -f3`
SY=$[$L-$[$T-$N]]

if [ $SY -lt $W ];then
​ echo 'Warning'
else
​ echo 'OK'
fi

给脚本传递2个参数(整数),显示此两者之和,之乘积
if [ $# -lt 2 ];then
​ echo "Usage: cacl.sh ARG1 ARG2"
​ exit 6
fi

echo "The sum is: $[$1+$2]."
echo "The prod is: $[$1*$2]."

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容