条件判断:
条件测试的表达式:
[ 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]."