《鸟哥的Linux私房菜》学习笔记(9)——条件判断

一、条件判断表达式                                                         

条件测试类型:

  • 整数测试
  • 字符测试
  • 文件测试

条件测试的表达式

  [ expression ](注意expression头和尾部各有一个空格)

  [[ expression ]]

  test expression

算术运算有三种方法:

  • let 算术运算表达式
  • $[算术运算表达式]
  • $((算术运算表达式))
  • expr 算术运算表达式
[root@hao ~]# A=3
[root@hao ~]# B=4
[root@hao ~]# let C=$A+$B
[root@hao ~]# echo $C
7
[root@hao ~]# D=$[$A+$B]
[root@hao ~]# echo $D
7
[root@hao ~]# E=$(($A+$B))
[root@hao ~]# echo $E
7
[root@hao ~]# F=`expr $A + $B`
[root@hao ~]# echo $F
7

1、整数测试:

  -eq:测试两个整数是否相等 $A -eq $ eB。

[root@hao ~]# A=3
[root@hao ~]# B=6
[root@hao ~]# [ $A -eq $B ]
[root@hao ~]# echo $?
1

  -ne:测试两个整数是否不等

  -gt:测试一个数是否大于另一个数

  -lt:小于

  -ge:大于等于

  -le:小于或等于

语句间的逻辑关系(短路操作)

  逻辑与、逻辑或

下面代码实现逻辑与,如果用户存在,则第一个语句为TRUE,则执行第二个语句。否则,若用户不存在,即第一个语句为false,则该逻辑与结果必为false,因此第二个语句就不会执行

[root@hao ~]# id user1 &> /dev/null && echo "hello,test true"
[root@hao ~]# id hao &> /dev/null && echo "hello,test true"
hello,test true

(1)如果用户不存在,则添加用户(用逻辑与、逻辑或两种方法实现)

[root@hao ~]# id user2
id: user2: No such user
[root@hao ~]# id user2 &> /dev/null || useradd user2
[root@hao ~]# id user2
uid=5002(user2) gid=5002(user2) groups=5002(user2)
[root@hao ~]# id user3
id: user3: No such user
[root@hao ~]# ! id user3 &> /dev/null && useradd user3
[root@hao ~]# id user3
uid=5003(user3) gid=5003(user3) groups=5003(user3)

 (2)如果一个文件的行数大于100,则显示该文件为大文件,否则显示为小文件

#!/bin/bash
LINES=$(wc -l /etc/inittab)
echo $LINES
FINLINES=`echo $LINES |cut -d' ' -f1`
echo $FINLINES
[ $FINLINES -gt 100 ]&& echo "etc/inittab is a big file" || echo "etc/inittab is a small file"

执行结果为:

26 /etc/inittab
26
etc/inittab is a small file

(3)如果用户存在,则显示该用户,如果用户不存在,则添加此用户

[root@hao ~]# id user1 && echo "user1 exits." || useradd user1
uid=5001(user1) gid=5001(user1) groups=5001(user1)
user1 exits.

(4)如果用户不存在,则添加用户并添加密码,如果存在,则显示用户已存在

[root@hao ~]# ! id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exits"
uid=5001(user1) gid=5001(user1) groups=5001(user1)
user1 exits

(5)给定一个用户,如果其UID为0,则显示为管理员,否则显示为普通用户

[root@hao ~]# nano third.sh
[root@hao ~]# cat third.sh
#!/bin/bash
NAME=user1
USERID=`id -u $NAME`
[ $USERID -eq 0 ] && echo "Admin" || echo "Common user".
[root@hao ~]# chmod +x third.sh
[root@hao ~]# ./third.sh
Common user.

 2、文件测试

  -e file :测试文件是否存在

  -f file :测试文件是否为普通文件

  -d file:测试指定路径是否为目录

  -r file:测试指定文件对当前用户是否可读

  -w file:测试指定文件对当前用户是否可写

  -x file:测试指定文件对当前用户是否可执行

(1)判断一个文件是否存在

#!bin /bash
FILE=/etc/inittab
if [ ! -e $FILE ]
then
    echo "no file"
    exit 8
fi

(2)给定一个文件,如果不存在,则退出脚本,如果存在且该文件为普通文件或者目录就显示之,否则,

#!/bin/bash
FILE=/etc/rc.d/rc.sysinit

if [ ! -e $FILE ]
then
    echo "no file"
    exit 6
fi

if [ -f $FILE  ]
then
    echo "common file"
elif [ -d $FILE ]
then
    echo "directory"
else
    echo "unknown"
fi

二、条件判断控制结构                                                    

1、单分支if语句:

if 判断条件

then

  statement1

  statement2

  ...

fi

2、双分支的if语句

if 判断语句

then

  statement1

  statement2

else

  statement3

  statement4

fi

3、多分支的if语句

if 判断条件1

then

  statement1

  ...

elif 判断条件2

then

  statement2

  ...

elif 判断条件3

then

  statement3

  ...

else

  statement4

  ...

fi

4、测试

(1)如果用户存在,输出用户存在,否则创建用户名和密码为用户名的密码。

[root@hao ~]# nano fourth.sh
[root@hao ~]# cat fourth.sh 
#!/bin/bash
NAME=user4
if id $NAME &> /dev/null
 then
    echo "$NAME exists"
else
    useradd $NAME
    echo $NAME | passwd --stdin $NAME &> /dev/null
    echo "add user successful"
fi
[root@hao ~]# chmod +x fourth.sh 
[root@hao ~]# ./fourth.sh 
add user successful
[root@hao ~]# ./fourth.sh 
user4 exists

(2)判断一个用户是否是管理员

[root@hao ~]# nano fifth.sh
[root@hao ~]# cat fifth.sh 
#!/bin/bash
NAME=user1
if [ `id -u $NAME ` -eq 0 ]
then
    echo "Admin"
else
    echo "Common"
fi
[root@hao ~]# chmod +x fifth.sh 
[root@hao ~]# ./fifth.sh 
Common

(3)判断当前系统上是否有用户的默认shell为bash,如果有,就显示有多少个这类用户,否则,就显示没有这类用户

[root@hao ~]# nano sixth.sh
[root@hao ~]# cat sixth.sh 
#!/bin/bash
grep "\<bash$" /etc/passwd &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]
then 
    USERS=`grep "\<bash$" /etc/passwd | wc -l`
    echo "$USERS users has shell of bash"
else 
    echo "no such users"
fi
[root@hao ~]# chmod +x sixth.sh 
[root@hao ~]# ./sixth.sh 
12 users has shell of bash

(4)上题基础上,如果存在上述用户,显示其中一个的用户名,否则显示没有此类用户

[root@hao ~]# nano seventh.sh
[root@hao ~]# cat seventh.sh 
#!/bin/bash
grep "\<bash$" /etc/passwd &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]
then 
    AUSER=`grep "\<bash$" /etc/passwd | head -1 | cut -d: -f1`
    USERS=`grep "\<bash$" /etc/passwd | wc -l`
    echo "One of the $USERS is $AUSER"
    
else 
    echo "no such users"
fi
[root@hao ~]# chmod +x seventh.sh 
[root@hao ~]# ./seventh.sh 
One of the 12 is root

(5)给定一个用户,判断其UID与GID是否一样,如果一样,就显示此用户为“good guy”;否则,就显示此用户为“bad guy”

#!/bin/bash
USERNAME=user1
USERID=`id -u $USERNAME`
GROUPID=`id -g $USERNAME `
if [ $USERID-eq $GROUPID]
then 
    echo "good guy"
    
else 
    echo "bad guy"
fi

 三、测试脚本                                                              

测试脚本是否有语法错误

bash -n file.sh

单步执行脚本

bash -x file.sh

四、定义退出状态码                                                       

exit:退出脚本

exit #

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

 

 

 

 

 

 

 

 

 

 

 

 

  

posted @ 2014-11-06 22:56  冥草有心  阅读(521)  评论(0编辑  收藏  举报