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,取代通常的输出,显示行数
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
实例2:检查主机是否在线
-c:表示发送几次包;-w:表示等待时间。当试图简写不可达主机时此选项很有用
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
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
if 语句可以直接对命令状态进行判断,就省去了获取$?这一步!
如果我们不想让用户看到命令的执行结果,可以把执行结果追加到/dev/null文件中(黑洞文件)
3、多分支
if 条件表达式; then
命令
elif 条件表达式; then
命令
else
命令
fi
当不确定条件符合哪一个时,就可以把已知条件判断写出来,做相应的处理。
实例:
$1:表示接受用户输入参数
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
[root@ren5 ~]# sh c.sh 3
eq 3
如果第一个条件符合就不再向下匹配
If语句实战案例
1、完成用户输入文件或者目录的自动复制,并可以实现用户指定复制目标位置;用户体验佳。
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
2、尝试写一个shell简单的计算器,实现加减乘除。
请输入一个数字: 7
请输入运算符:+
请输入第二个数字:7
7+7=14
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
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
3、输入一个用户,用脚本判断该用户是否存在。
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