Linux流程控制语句:if、for、while、case

if条件测试语句

单分支结构

if [ 条件测试操作 ];then
    执行操作
fi

示例:

#!/bin/bash
DIR="/tmp/test"
if [ ! -d $DIR ] ; then
    mkdir -p $DIR
fi

双分支结构

if [ 条件测试操作 ];then
    执行操作
else
    执行操作
fi

示例:

#!/bin/bash
# ping 3 次,每次间隔 0.2s ,3s 超时,检查主机是否在线
ping -c 3 -i 0.2 -w 3 $1 &> /dev/null
if [ $? -eq 0 ] ; then
    echo "Host $1 is Online"
else
    echo "Host $1 is Offline"
fi

多分支结构

if [ 条件测试操作 ] ; then
    执行操作
elif [ 条件测试操作 ] ; then
    执行操作
elif [ 条件测试操作 ] ; then
    执行操作
else
    执行操作
fi

示例:

#!/bin/bash
read -p "输入你的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
    echo "大于等于85分,小于等于100分,优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
    echo "大于等于70分,小于等于84分,优秀"
else
    echo "再接再厉"
fi

for循环语句

语句结构

for i in i_list
do
    执行操作
done

示例

cat users.txt
> andy
> carl
> duke

#!/bin/bash
reap -p "输入用户的密码:" PASSWD
for UNAME in `cat users.txt`
do
    id $UNAME &> /dev/null
    if [ $? -eq 0 ] ; then
        echo "$UNAME 已存在"
    else
        useradd $UNAME
        echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
        echo "$UNAME,创建成功"
    fi
done

while条件循环语句

语句结构

while 条件测试操作
do
    执行操作
done

示例

#!/bin/bash
# 猜价格
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为 0-999 之间,请猜猜是多少?"
while true
do
    read -p "请输入您猜的价格数目:" INT
    let TIMES++
    if [ $INT -eq $PRICE ] ; then
        echo "恭喜您猜对了,实际价格就是 $PRICE"
        echo "您总共猜了 $TIMES 次"
        exit
    elif [ $INT -gt $PRICE ] ; then
        echo "猜的太高了"
    else
        echo "猜的太低了"
    fi
done

case 条件测试语句

语句结构

case 变量值 in
模式1)
    执行操作
    ;;
模式2)
    执行操作
    ;;
...
*)
    默认操作
esac

示例

#!/bin/bash
# 判断用户输入的字符类型
read -p "请输入一个字符,并按 Enter 键确认:" KEY
case "$KEY" in
    [a-z]|[A-Z])
        echo "您输入的是字母"
        ;;
    [0-9])
        echo "您输入的是数字"
        ;;
    *)
        echo "您输入的是其他字符"
esac