Shell脚本case、for、while循环语句小结

一、case语句

  • case语句和if语句相比,可以使得脚本程序的结构更加清晰、层次分明。

1.1 case语句的结构

  • case语句主要适用于变量存在多种取值,需要对其中的每一种取值执行不同的条件。
  • case分支语句的语法结构如下:
case 变量值  in
模式 1)
	命令序列 1
	;;
模式 2)
	命令序列 2
	;;
*)
	默认命令序列
esac
  • 关键字后面跟的是“变量值”,即 “$变量名”。整个分支结构包括在case……esac之间,中间的模式1、模式 2、…… 对应不同取值(程序期望的取值),其中 * 作为通配符,可匹配任意值。
  • 语句流程:首先使用“变量值”与模式1 进行比较,若取值相同则执行模式1后的命令序列,知道遇见双分号,后跳转至esac,表示结束分支;若与模式1不相匹配,则继续与模式2进行比较………… 依次类推,若找不到任何匹配的值,则执行默认模式“*)”后的命令序列,直到遇见esac后结束分支。
  • 使用case分支语句需注意
case行尾必须为单词 “in”,每一模式必须以右括号“)”结束。
双分号”;;“表示命令序列的结束
模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”,还可以用竖杠符号“|”表示或,如“A|B”
最后的“*)”表示默认模式,其中的* 相当于通配符。

在这里插入图片描述

1.2 case语句应用实例

1.2.1 输出成绩分类

  • 输入成绩 成绩85-100的输出优秀,成绩70-84的输出良,成绩60-69的输出成绩合格,其他输出成绩为不合格。
#! /bin/bash
read -p "请输入成绩(0-100):"  score
        case "$score" in
8[5-9]|9[0-9]|100)
        echo "成绩为优秀"
        ;;
7[0-9]|8[0-4])
        echo "成绩为良" 
        ;;
6[0-9])
        echo "成绩为合格"       
        ;;
 * )
        echo "成绩为不合格"
esac
~         
[root@localhost ~]# sh case.sh 
请输入成绩(0-100):67
成绩为合格

二、for循环语句

  • 在工作中,会遇到某项任务要执行多次的情况,每次执行时仅仅只是对象不一样,其他都一样。简单的if语句已经难以满足要求,for循环语句,可以很好的解决这一问题。

2.1 for语句的结构

  • 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每一个不同的取值重复执行的命令序列,直到变量值用完退出循环。
  • “取值列表”为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定。
  • for 循环语句的语法结构如下
for 变量名 in  取值列表
do
	命令序列
done
  • 循环结构
for ((i=1;i<=10;i++))
  do
	命令序列
done
  • 执行流程: 首先将列表中的第一个取值赋给变量,并执行do……done循环体系中的命令序列,再将列表中的第2个取值赋给变量,并执行do……done循环体系中的命令序列,以此类推,直到表中所有取值都用完,最后跳到done语句,表示循环结束。
  • 流程图
    在这里插入图片描述

2.2 for语句应用示例

2.2.1根据IP地址列表检查主机状态

  • ping 指定的IP地址看能不能用,能输入“up”,不能输出 “down”。
[root@localhost ~]# vim ipadds.txt   ## 设置取值列表内容
192.168.233.100
192.168.233.200
192.168.233.2
~                                                                                                                                   
[root@localhost ~]# vim ping.sh 
#!/bin/bash

list=$(cat ipadds.txt) ## 将列表指定到list列表
for IP in $list
   do
 ping -c 3 -i 0.2 -W 3 $IP  &> /dev/null  ## 将ping时屏幕输出的消息全部导入黑洞不显示
if [ $? -eq 0 ]
then
        echo "Host $1 is up."
else
        echo "Host $1 is down."
fi
done
[root@localhost ~]# sh ping.sh   ## 测试成功
Host  is up.
Host  is down.
Host  is up.               

2.2 输出一个等腰三角形

#! /bin/bash
i=1
while [ $i -le 9 ]
do
  for ((j=9;j>=i;j-- ))
do
        echo  -n " "
done
  for ((k=1;k<=2*i-1;k++))
    do
    echo -n "*"
   done

        let i++
echo  " "
done

三、while循环语句

  • 对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,适合使用while语句。

3.1whlie语句的结构

  • while语句,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足为止。应尽量避免出现死循环的情况,特殊情况除外。
  • 语法结构如下
while 条件测试语句
do
   命令序列
   done
  • 语句执行流程: 判断while后条件测试语句结果,结果成立,则执行do……done循环体中的命令序列,返回while后再次判断条件测试语句,如果满足,接续执行do……done循环体中命令,如果不满足直接退出循环。如此往复,直到条件测试结果不再满足。
  • 流程图
    在这里插入图片描述

3.2 while 语句应用示例

3.1 添加stu1到stu20用户,设置密码为123456

#! /bash/bin
i=0
while [ $i -le 20 ]
do
          useradd stu$1
 echo  “123456” | passwd --stdin stu$i
        let i++
done
~        

猜你喜欢

转载自blog.csdn.net/weixin_47219725/article/details/107452415