一、使用if-then语句(单分支)

用法:

if 条件测试;then

  语句1

  语句2

  ……

fi

解释:if 后面的条件测试返回的状态码为0,则执行程序体中的语句;若返回的状态码为非0,则退出。

条件测试:有多种形式,包括bash命令和“[]”测试,后面都会用到

1判断一个文件是否存在,如果存在,则输入该文件已存在,如果存在,则输出该文件存在

#!/bin/bash
#
PATH=PATH:/root/bin
if  test –e  /etc/passwd;then
   echo “file exsit”
fi


第一行的#!/bin/bash声明这个脚本所使用的shell名称,之后以#开头的行均为注释行。

这里条件测试为test –e  /etc/passwd,用来判断/etc/passwd是否存在,如果存在,则该命令返回的状态值为0(单独执行完该命令后,可以使用$?查看其返回值)

2写一个脚本,判断,如果用户名存在,则显示其UIDshell

#!/bin/bash
#
User=user1
if id $User&> /dev/null;then  
    grep "$User" /etc/passwd | cut -d":" -f3,7
fi


这里的条件测试为id $User,如果user1存在,那么id $User这个bash命令就会成功执行,返回状态值为0,但是我们不需要知道他执行成功后的结果,于是我们将其重定向至/dev/null,程序体中语句的意思是:讲grep撷取到的行送至cut命令,并以“:”为分割符,取其中第三和第七个字段,并显示出来

3如果/etc/rc.d/rc.sysinit中有空白行,就显示其行数

#!/bin/bash
#
if grep"^$" /etc/rc.d/rc.sysinit &> /dev/null;then
   grep "^$" /etc/rc.d/rc.sysinit |wc -l
fi


^”意味行首锚定,“$”意味行尾锚定,“^$”行首与行尾直接没有字符,即为空白行。“wc -l”的作用是用来统计grep所撷取到的行的数目。

 

 

二、使用if-else-then语句(双分支)

用法

if 条件测试;then

  语句1

  语句2

  ……

else

  语句1

  语句2

  ……

fi

解释:if 后面的条件测试返回的状态码为0,则执行程序体中的语句;若返回的状态码为非0,则执行else下面程序体中的语句。

4如果指定用户存在,先说明其存在并显示ID号和shell;否则,就添加用户,并显示其ID

#!/bin/bash
#
User=user2
if id $User&> /dev/null;then
   echo "$User exist"
   grep "$User" /etc/passwd | cut -d":" -f3,7
else
   useradd $User
   grep "$User" /etc/passwd | cut -d":" -f3
fi


 

例五:如果设备/dev/sda3已挂载,就显示其挂载点;否则,说明其未挂载。

#!/bin/bash
#
Device=/dev/sda3
if mount | grep"$Device" &> /dev/null;then
   grep "$Device" | cut -d"" -f3
else
   echo "$Device is not exist"
fi


 

三、bash条件测试

1.整数测试

2.字符测试

3.文件测试

整数测试:数值1 比较符号数值2

比较符号:

    -ge:相等(equal)

   -ne:不等(not equal)

   -gt:大于(greater than)

   -lt:小于(less than)

   -ge:大于等于(greater than or equal)

   -le:小于等于(less than or equal)

例六:两个整数比较大小,输出较大值

注:这里使用$RANDOM 内置变量随机生成整数

#!/bin/bash
#
A=$RANDOM
B=$RANDOM
if [ $A -ge $B];then
   echo "Max num is $A"
else
   echo "Max num is $B"
fi


注意:[]中判断式与括号之间以i的那个要有空格。

例七:随机一个整数,判断其奇偶性

#!/bin/bash
#
A=$RANDOM
if [ $[$A%2] -eq 0];then
   echo "$A is even"
else
   echo "$A is odd"
fi


 

字符测试:字符串1 比较符号字符串2

比较符号:

    >:大于

    <:小于

   ==:等于

例八:判断给定用户的shell是否为/bin/bash

#!/bin/bash
#
User=user1
Shell=`grep"$User" /etc/passwd | cut -d ":" -f7`
 
if [ $Shell =="/bin/bash" ];then
   echo "$User is a bash user"
else
   echo "$User is not a bash user"
fi


 

文件测试:主要使用test [选项] filename

文件类型:

    -e:文件名是否存在

    -f:文件名是否存在且为文件

    -d:文件名是否存在且为目录

    -b:文件名是否存在且为块设备

    -c:文件名是否存在且为字符设备

    -S:文件名是否存在且为Socket文件

    -p:文件名是否存在且为FIFO文件

    -L:文件名是否存在且为链接文件

文件权限:

    -r:读权限

    -w:写权限

    -x:可执行权限

    -uSUID权限

    -gSGID权限

    -s:非空白文件

文件比较:file1 比较符号 file2

    -ntfile1是否比file2

    -otfile1是否比file2

    -effile1file2是否为同一文件

字符判定:

    -z $string:若string为空字符串,则结果为true

    -n $string:若string为空字符串,则结果为fasle

四、使用if-elif-else-then-else语句(多分支)

用法

if 条件1;then

  语句1

  语句2

  ……

elif条件2;then

  语句1

  语句2

  ……

else

语句1

  语句2

  ……

fi