#!/bin/bash
#this shell test mysql user exist system.
if id mysql ;then
echo "mysql exist."
fi
双分支if语句
if [ 条件 ];then
语句...
else
语句...
fi
这种双分支的语句,等条件满足的时候就会运行then后面的语句,条件不满足的时候就运行else后面的语句。
eg1:如果指定的用户存,先说明其已经存在,并显示其ID号和SHELL;否则,就添加用户,并显示其ID号;
#!/bin/bash
Username=mysql
if id $Username &>/dev/null;then
Id=`grep "^$Username\>" /etc/passwd | cut -d: -f3`
Shell=`grep "^$Username\>" /etc/passwd | cut -d: -f7`
echo "$Username exist,ID is $Id,shell is $Shell."
else
useradd $Username
Id=`grep "^$Username\>" /etc/passwd | cut -d: -f3`
echo "$Username ID is $Id."
fi
eg2:判断用户是否存在,存在则显示ID和SHELL,不存在就添加用户,并显示其ID。
分析:这题与上一个列子不一样的地方是这个用户没有指定,既然没有指定,就需要自己手动去shell一个参数,而脚本怎么去引用参数。这里就用到了bash变量中的位置变量
位置变量:$1,$2.....$9($1就是脚本传递的第一个参数...)
$0:脚本自身名称
$@:所有位置参数的列表
$*:所有位置参数
$#:位置参数的个数
#!/bin/bash
if id $1 &>/dev/null;then
Id=`grep "^$1\>" /etc/passwd | cut -d: -f3`
Shell=`grep "^$1\>" /etc/passwd | cut -d: -f7`
echo "$1 exist,ID is $Id,shell is $Shell."
else
useradd $1
Id=`grep "^$1\>" /etc/passwd | cut -d: -f3`
echo "$1 ID is $Id."
fi
运行脚本 bash eg2.sh mysql (eg.sh是脚本的名称,mysql是传递给脚本的第一个参数)
eg3:通过参数传递一系列用户名给脚本,让脚本添加这些用户;但要先判断用户是否存在,不存在而后再添加;添加完成后,显示一共添加了几个用户;当然,不能包括因为事先存在而没有添加的;
分析:这个脚本不明确的是不知道要传递几个参数,所以用位置变量有点不符合要求,所以引用了$@这个特殊的变量,然后这些用户,你得一个一个的去取这些用户,然后进行判断是否存在,用循环控制了如何一个一个的取这些用户,然后用户不能重复的一个一个的取,所以用户得取一个T掉$@列表中的用户,用了shift命令,shift命令就是轮流的T除用户。
#!/bin/bash
count=0
for user in $@;do
if id $1 &>/dev/null;then
echo "user $1 exsit."
shift
else
useradd $1
count=$[$count+1]
echo "add $1."
shift
fi
done
echo "total users:$count"
运行脚本
嵌套if语句(最常见的嵌套)
if [ 条件1 ];then
if [ 条件2 ];then
语句...
else
语句.....
fi
else
语句....
fi
这种嵌套的if语句就相对复杂一点,当条件1满足时,就运行第一个then后面的语句,在条件1满足后,在判断条件2,当条件1和条件2同时满足的时候就会运行第二个then后面的语句,当只有条件1满足,条件2不满足就会运行第一个else后面的语句,如果条件1都不满足,那就直接运行第二个else后面的语句了。
eg4:判断一个用户,如果存在则判断是否是普通用户,还是系统用户,还是admin用户。不存在则显示该用户不存在。
分析:首先判断用户是否存在,存在则比较用户的ID是否为大于等于500,大于等于500则表示为普通用户,是否1-499,是则表示为系统用户,是否为0,是则为admin用户。
本例子还用到了数值的比较,然后还用到了条件的组合
linux test命令支持数值比较、字符串比较、文件比较 详情请man test
数值比较
num1 -eq num2 检查num1是否等于num2
num1 -ge num2 检查num1是否>或等于num2
num1 -gt num2 检查num1是否大于num2
num1 -le num2 检查num1是否<等于num2
num1 -lt num2 检查num1是否<num2
num1 -ne num2 检查num1是否不等于num2
#!/bin/bash
if id $1 &> /dev/null;then
Id=`grep "^$1\>" /etc/passwd | cut -d: -f3`
if [ $Id -ge 500 ];then
echo "$1 is common user."
elif [ $Id -lt 500 -a $Id -ge 1 ];then
echo "$1 is system user."
else
echo "$1 is admin user."
fi
else
echo "$1 Not exist."
fi
脚本执行结果
#!/bin/bash
Shell=`grep "^$1:" /etc/passwd | cut -d: -f7`
if [ -z $Shell ];then
echo "$1 user no shell"
else
if [ "$Shell" == "/bin/bash" ]; then
echo "$1 user shell is login shell."
else
echo "$1 user shell is nologin shell."
fi
fi
运行结果