一、bash中如何实现条件判断
1、条件测试类型:
a)整数测试:两值是否相等;
b)字符测试:某个变量是否包含abc;
c)文件测试:判断文件是否存在;
2、条件测试的表达式:
a)[ expression ]
b)[[ expression ]]
c)test expression
二、整数比较
1、-eq:测试两个整数是否相等:相等,为真;不等,为假;
如:# A=2
# B=3
# $A -eq $B
# echo $?
1
2、-ne:测试两个整数是否不等:不等,为真;相等,为假;
3、-gt:测试一个数是否大于另一个数:大于,为真;否则,为假;
4、-lt:测试一个数是否小于另一个数:小于,为真;否则,为假;
5、-ge:大于或等于;
6、-le:小于或等于;
三、bash命令间的逻辑关系
1、逻辑与:&&;
a)第一个条件为假时,第二个条件不用在判断,最终结果已经有;
b)第一个条件为真时,第二个条件必须得判断;
如1:id student &> /dev/null && echo "Hello,student."(默认student是存在的);
如2:如果用户user6不存在,就添加用户user6(默认user6不存在):
! id user6 && useradd user6;
2、逻辑或:||;
a)第一个条件为假时,第二个条件必须得判断;
b)第一个条件为真时,第二个条件不用在判断,最终结果已经有;
如:如果用户user6不存在,就添加用户user6(默认user6不存在):
id user6 || useradd user6,表示id user6为真,则不执行useradd user6。
如果id user6为假,则执行useradd user6;
四、变量名称规则
1、变量名称只能包含字母、数字和下划线,并且不能以数字开头;
2、不应该跟系统中已有的环境变量重名;
3、最好做到见名知义;
练习1:
如果/etc/inittab文件的行数大于100,就显示好大的文件;
命令显示:
[ 'wc -l /etc/inittab | cut -d ' ' -f1' -gt 100 ] && echo "Large file."
编写脚本:
# nano bigfile.sh
#!/bin/bash
FILE=`wc -l /etc/inittab`
BIGFILE='echo $FILE | cut -d' ' -f1'
[ $BIGFILE -gt 100 ] && echo "/etc/inittab is large file." || echo "/etc/inittab is small file."
练习2:
1、如果用户存在就显示用户已存在;否则,就添加此用户;
id user1 && echo "user1 exists." || useradd user1
2、如果用户不存在,就添加;否则,显示其用户存在;
! id user1 && useradd user1 || echo "user1 exists."
3、如果用户不存在,添加并且给密码;否则,显示其已经存在;
! id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists."
练习3,写一个脚本,完成以下要求:
1、添加3个用户user1,user2,user3;但要先判断用户是否存在,不存在而后在添加;
2、添加完成后,显示一共添加了几个用户;当然,不能包含因为事先存在而没有添加的;
3、最后显示当前系统上共有多少个用户;
# nano useradd.sh
#!/bin/bash
! id user1 && useradd user1 && echo "user1" | passwd -- stdin user1 &> /dev/null || echo "user1 exists."
! id user2 && useradd user2 && echo "user2" | passwd --stdin user2 &> /dev/null || echo "user2 exists."
! id user3 && useradd user3 && echo "user3" | passwd --stdin user3 &> /dev/null || echo "user3 exists."
USERS=`wc -l /etc/passwd | cut -d: -f1`
echo "$USERS users."
# chmod +x ./useradd.sh
# ./useradd.sh
练习4,写一个脚本,完成以下要求:
给定一个用户:
1、如果其UID为0,就显示此为管理员;
2、否则,就显示其为普通用户;
# nano admin.sh
#!/bin/bash
NAME=user1
USERID=`id -u $NAME`
[ $USERID -eq 0 ] && echo "Admin" || echo "Comond user."
#bash ./admin.sh
或者
#!/bin/bash
NAME=user1
USERID=`id -u $NAME`
if [ $USERID -eq 0 ];then
echo "Admin"
else
echo "Comond user."
fi
五、条件判断,控制结构
1、单分支if语句:
if 判断条件;then
statement1
statement2
...
fi
2、双分支的if语句:
if 判断条件;then
statement1
statement2
...
else
statement3
statement4
...
fi
如:#/bin/bash
#
NAME=user1
if id $NAME &> /dev/null;then
echo "$NAME exists."
else
useradd $NAME
echo $NAME | passwd --stdin $NAME
fi
3、多分支if语句:
if 判断条件1;then
statement1
...
elif 判断条件2;then
statement2
...
elif 判断条件3;then
statement3
...
else
statement4
...
fi
如:给定一个文件;如果是一个普通文件,就显示为文件;
如果是一个目录,就显示为目录;
否则,显示此文件无法识别;
# nano filetest2.sh
#!/bin/bash
#
FILENAME=/etc/rc.d/rc.init
if [ ! -e $FILENAME ];then
echo "Not such file."
exit 5
fi
if [ -f $FILENAME ];then
echo "The such is file."
elif [ -d $FILENAME ];then
echo "Directory."
else
echo "Unknow."
fi
# bash ./filetest.sh 。