Shell流程控制

流程控制是改变程序运行顺序的指令。linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case)。下面我将通过例子介绍下,各个语句使用方法

if语句

格式:if list; then list; [ elif list; then list; ] ... [ else list; ] fi

1、单分支

if 条件表达式; then

命令

fi

2、双分支

if 条件表达式; then

  命令

else

  命令

fi

实例1判断crond进程是否正在运行

-v:表示取反;-c:即count,取代通常的输出,显示行数

linux shell if 联合grep linux shell if语句_运算符

linux shell if 联合grep linux shell if语句_运算符_02

1 #!/bin/bash
2 NAME=crond
3 NUM=$(ps aux |grep $NAME |grep -vc grep)
4 if [ $NUM -eq 1 ];then
5 echo "$NAME running."
6 else
7 echo "$NAME is not running!"
8 fi

View Code

实例2:检查主机是否在线

-c:表示发送几次包;-w:表示等待时间。当试图简写不可达主机时此选项很有用

linux shell if 联合grep linux shell if语句_运算符

linux shell if 联合grep linux shell if语句_运算符_02

1 #!/bin/bash
2 if ping -c 1 192.168.11.5 &>/dev/null;then
3 echo "OK" 
4 else
5 echo "NO"
6 fi

View Code

linux shell if 联合grep linux shell if语句_运算符

linux shell if 联合grep linux shell if语句_运算符_02

1 #!/bin/bash
2 read -p "请输入您想检测的IP地址:" ip
3 ping -c 1 -w 1 $ip &>/dev/null
4 if [ $? -eq 0 ];then
5 echo "OK" 
6 else
7 echo "NO"
8 fi

View Code

if 语句可以直接对命令状态进行判断,就省去了获取$?这一步!

如果我们不想让用户看到命令的执行结果,可以把执行结果追加到/dev/null文件中(黑洞文件)

3、多分支

if 条件表达式; then

  命令

elif 条件表达式; then

  命令

else

  命令

fi

当不确定条件符合哪一个时,就可以把已知条件判断写出来,做相应的处理。

实例:

$1:表示接受用户输入参数

linux shell if 联合grep linux shell if语句_运算符

linux shell if 联合grep linux shell if语句_运算符_02

1 #!/bin/bash
 2 N=$1
 3 if [ $N -eq 3 ];then
 4         echo "eq 3"
 5 elif [ $N -eq 5 ];then
 6         echo "eq 5"
 7 elif [ $N -eq 8 ];then
 8         echo "eq 8"
 9 else
10         echo "no"
11 fi

View Code

[root@ren5 ~]# sh c.sh 3
eq 3

如果第一个条件符合就不再向下匹配

If语句实战案例

1、完成用户输入文件或者目录的自动复制,并可以实现用户指定复制目标位置;用户体验佳。

linux shell if 联合grep linux shell if语句_运算符

linux shell if 联合grep linux shell if语句_运算符_02

1 #!/bin/bash
 2 read -p "请输入你想复制的文件或目录:" file
 3 if [ -f "$file" -o -d "$file" ];then
 4         read -p "是否确定要复制该文件(y/n)" sure
 5         confirm=$(echo ${sure} |tr A-Z a-z )
 6         if [ "$confirm" == "y" ];then
 7                 read -p "请输入你要复制的位置:" place
 8                 if [ -d "$place" ];then
 9                         cp -a $file $place
10                         echo "$file已经复制到$place。"
11                 else
12                         echo "$place位置不存在"
13                         exit
14                 fi
15         elif [ "$confirm" == "n" ];then
16                 echo "再见"
17         else
18                 echo "请输入y或n"
19         fi
20 else
21         echo "$file不存在"
22 fi

View Code

2、尝试写一个shell简单的计算器,实现加减乘除。

请输入一个数字:

请输入运算符:+

请输入第二个数字:7

7+7=14

linux shell if 联合grep linux shell if语句_运算符

linux shell if 联合grep linux shell if语句_运算符_02

1 #!/bin/bash
 2 read -p "请输入第一个数字:" NUM1
 3 read -p "请输入运算符[+-*/]:" CHA
 4 read -p "请输入第二个数字:" NUM2
 5 if [ -n "$NUM1" -a -n "$CHA" -a -n "$NUM2" ];then
 6         if [ "$CHA" == "+" ];then
 7                 echo "$NUM1+$NUM2=$(($NUM1+$NUM2))"
 8         elif [ "$CHA" == "-" ];then
 9                 echo "$NUM1-$NUM2=$(($NUM1-$NUM2))"
10         elif [ "$CHA" == "*" ];then
11                 echo "$NUM1*$NUM2=$(($NUM1*$NUM2))"
12         elif [ "$CHA" == "/" ];then
13                 echo "$NUM1/$NUM2=$[$NUM1/$NUM2]"
14         else
15                 echo "请输入[+-*/]"
16         fi
17 else
18         echo "请输入内容!"
19 fi

View Code

linux shell if 联合grep linux shell if语句_运算符

linux shell if 联合grep linux shell if语句_运算符_02

1 #!/bin/bash
 2 read -p "请输入第一个数字:" NUM1
 3 read -p "请输入运算符[+-*/]:" CHA
 4 read -p "请输入第二个数字:" NUM2
 5 count () {
 6         echo "${NUM1}${CHA}${NUM2}=$((${NUM1}${CHA}${NUM2}))"
 7 }
 8 error () {
 9         echo "Usage:$0 {+|-|*|/}"
10 }
11 if [ -n "$NUM1" -a -n "$CHA" -a -n "$NUM2" ];then
12         if [ "$CHA" == "+" ];then
13                 count
14         elif [ "$CHA" == "-" ];then
15                 count
16         elif [ "$CHA" == "*" ];then
17                 count
18         elif [ "$CHA" == "/" ];then
19                 count
20         else
21                 error
22         fi
23 else
24         echo "请输入内容!"
25 fi

View Code

3、输入一个用户,用脚本判断该用户是否存在。

linux shell if 联合grep linux shell if语句_运算符

linux shell if 联合grep linux shell if语句_运算符_02

1 #!/bin/bash
2 read -p "请输入用户名:" USER
3 TOF=$(cat /etc/passwd |awk -F: '{print $1}' |grep -w "$USER" -c)
4 if [ $TOF -eq 0 ];then
5         echo "该用户不存在"
6 else
7         echo "该用户存在"
8 fi

View Code