linux 简单记录4--if,for,while,case 流程控制

Posted 春困秋乏夏打盹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 简单记录4--if,for,while,case 流程控制相关的知识,希望对你有一定的参考价值。

--if 条件判断语句

if 条件判断
    then 命令序列1
else 命令序列2
fi
[root@iscsi opt]# vim mkmydata.sh
#!/bin/bash
dir="/opt/mydata"
if [ ! -e $dir ]
then
mkdir -p $dir
fi
[root@iscsi opt]# bash mkmydata.sh 
[root@iscsi opt]# ll /opt/mydata
total 0
[root@iscsi opt]# ls -d /opt/mydata
/opt/mydata

[root@iscsi opt]# vim chkhost.sh
[root@iscsi opt]# bash chkhost.sh 10.15.7.20
host 10.15.7.20 is on-line
[root@iscsi opt]# bash chkhost.sh 10.15.7.21
host 10.15.7.21 is off-line
[root@iscsi opt]# cat chkhost.sh 
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null #-c 次数,-i 定义每个数据包发送间隔,-W 等待超时时间
if [ $? -eq 0 ]
then
echo "host $1 is on-line"
else
echo "host $1 is off-line"
fi
# $?变量是否为0来判断上一条语句执行情况,成功为0,否则非0
if 条件判断1
    then 命令序列1
elif 条件判断2
    then 命令序列2
else 命令序列3
fi
[root@iscsi opt]# vim chkscore.sh
[root@iscsi opt]# bash chkscore.sh 
Enter your score(0-100): 101
please enter the right score :101 
101 is Fail
[root@iscsi opt]# bash chkscore.sh 
Enter your score(0-100): 87
87 is Excellent
[root@iscsi opt]# bash chkscore.sh 
Enter your score(0-100): 70
70 is Pass
[root@iscsi opt]# bash chkscore.sh 
Enter your score(0-100): -10
please enter the right score :-10 
-10 is Fail

[root@iscsi opt]# cat chkscore.sh 
#!/bin/bash
read -p "Enter your score(0-100): " GRADE
if [ $GRADE -gt 100 ] || [ $GRADE -lt 0 ] ; then
echo "please enter the right score :$GRADE "
fi

if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi

[root@iscsi opt]# bash chkscore.sh 
Enter your score(0-100): 101
please enter the right score :101 
[root@iscsi opt]# vim chkscore.sh 
[root@iscsi opt]# bash chkscore.sh 
Enter your score(0-100): 102
please enter the right score :102 
[root@iscsi opt]# cat chkscore.sh 
#!/bin/bash
read -p "Enter your score(0-100): " GRADE
if [ $GRADE -gt 100 ] || [ $GRADE -lt 0 ] ; then
echo "please enter the right score :$GRADE "
exit 0 #exit 1
fi

if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi

2 for循环判断语句

for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理,当要处理的数据有范围时,使用for循环很适合。
for 变量名 in 取值列表
do
    命令序列
done
[root@iscsi opt]# cat users.txt 
yhq
abc
hong
tang
car
[root@iscsi opt]# cat create_user.sh 
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null #重定向到空洞文件/dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done
[root@iscsi opt]# bash create_user.sh 
Enter The Users Password : yhq
yhq , Create success
abc , Create success
hong , Create success
tang , Create success
car , Create success
[root@iscsi opt]# tail -n 5 /etc/passwd
yhq:x:1004:1004::/home/yhq:/bin/bash
abc:x:1005:1005::/home/abc:/bin/bash
hong:x:1006:1006::/home/hong:/bin/bash
tang:x:1007:1007::/home/tang:/bin/bash
car:x:1008:1008::/home/car:/bin/bash

使用ip地址列表,用for循环判断主机ip是否能ping通
[root@iscsi opt]# cat iplist.txt 
10.15.7.20
10.15.7.21
10.15.7.29
[root@iscsi opt]# cat checkiplist.sh 
#!/bin/bash
lists=$(cat /opt/iplist.txt)
for ip in $lists
do
ping -c 3 -i 0.2 -W 3 $ip &> /dev/null
if [ $? -eq 0 ] ; then
echo "host $ip is on-line"
else
echo "host $ip is off-line"
fi
done
[root@iscsi opt]# bash checkiplist.sh 
host 10.15.7.20 is on-line
host 10.15.7.21 is off-line
host 10.15.7.29 is off-line

3 while条件循环

while条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,在执行前不确定最终执行的次数,不同于for循环语句中
有目标、有范围的使用场景。
while 条件判断操作
do
    命令序列
done
[root@iscsi opt]# cat guess.sh 
#!/bin/bash
PRICE=$(expr $RANDOM % 1000) ##expr命令获取结果
TIMES=0
echo "商品实际价格为 0-999 之间,猜猜看是多少? "
while true
do
read -p "请输入您猜测的价格数目: " INT
let TIMES++ ##times变量加1
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答对了,实际价格是 $PRICE"
echo "您总共猜测了 $TIMES 次"
exit 0 ##终止脚本的运行
elif [ $INT -gt $PRICE ] ; then
echo "太高了! "
else
echo "太低了! "
fi
done
[root@iscsi opt]# bash guess.sh 
商品实际价格为 0-999 之间,猜猜看是多少? 
请输入您猜测的价格数目: 123
太低了! 
请输入您猜测的价格数目: 99
太低了! 
请输入您猜测的价格数目: 300
太高了! 
请输入您猜测的价格数目: 200
太低了! 
请输入您猜测的价格数目: 268
太低了! 
请输入您猜测的价格数目: 290
太高了! 
请输入您猜测的价格数目: 280
恭喜您答对了,实际价格是 280
您总共猜测了 7 次

4 case条件判断语句

case 变量值 in
模式1)
    命令序列1
    ;;
模式2)
    命令序列2
    ;;
    .....
*)
    默认命令序列
esac
[root@iscsi opt]# cat checkkeys.sh 
#!/bin/bash
read -p "请输入一个字符,并按 Enter 键确认: " KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。 "
;;
[0-9])
echo "您输入的是 数字。 "
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。 "
esac
[root@iscsi opt]# bash checkkeys.sh 
请输入一个字符,并按 Enter 键确认: b
您输入的是 字母。 
[root@iscsi opt]# bash checkkeys.sh 
请输入一个字符,并按 Enter 键确认: 2
您输入的是 数字。 
[root@iscsi opt]# bash checkkeys.sh 
请输入一个字符,并按 Enter 键确认: @
您输入的是 空格、功能键或其他控制字符。

注:实例来自于《linux就该这么学》

以上是关于linux 简单记录4--if,for,while,case 流程控制的主要内容,如果未能解决你的问题,请参考以下文章

Python中的循环结构

Javascript流程控制

Jenkins创建日志记录器

03JAVA循环结构

03JAVA循环结构

大数值基础for与while循环的简单对比