博客
关于我
Shell 脚本应用(三)—case 多分支语句,for 循环语句,while 循环语句
阅读量:679 次
发布时间:2019-03-15

本文共 4640 字,大约阅读时间需要 15 分钟。

Shell 脚本应用(三)

一、for 循环语句

1. for 语句的结构

for 语句是用于读取不同的变量值,逐个执行同一组命令的循环语句。它的语法结构如下:

for 变量名 in 取值列表 do  命令序列done

取值列表可以有多种方式,例如直接读取 in 后面的值,默认以空格分隔。

2. 使用 for 语句创建脚本

1)批量添加用户

  • 将用户名存放在 1.txt 文件中,每行一个。
  • 创建 for 循环语句脚本:
  • #!/bin/bashfor a in `cat /root/1.txt`do  useradd $a >> /dev/null  echo "用户 $a 已创建"  echo "123" | passwd --stdin $a >> /dev/nulldone
    1. 执行脚本:
    2. chmod +x 1.sh./1.sh
      1. 执行结果:
      2. [root@localhost ~]# cat /etc/passwd | tail -4zhangsan:x:1001:1001::/home/zhangsan:/bin/bashlisi:x:1002:1002::/home/lisi:/bin/bashwangwu:x:1003:1003::/home/wangwu:/bin/bashxiaoming:x:1004:1004::/home/xiaoming:/bin/bash

        2)根据 IP 地址检查主机状态

      3. 将 IP 地址存放在 2.txt 文件中,每行一个。
      4. 创建 for 循环语句脚本:
      5. #!/bin/bashfor A in $(cat /root/2.txt)do  ping -c 3 -i 0.2 -W 3 $A >> /dev/null  if [ $? -eq 0 ]  then    echo "Host $A is Up"  else    echo "Host $A is Down"  fidone
        1. 执行脚本:
        2. chmod +x 2.sh./2.sh
          1. 执行结果:
          2. Host 192.168.1.1 is UpHost 192.168.1.2 is DownHost 192.168.1.3 is Down

            3)99 乘法表

          3. 创建 99.sh 脚本:
          4. #!/bin/bashfor A in {1..9}do  for B in {1..9}  do    if [ $A -ge $B ]    then      echo -ne "$B*$A=$[$A*$B]\t"    fi  donedone
            1. 执行脚本:
            2. sh 99.sh
              1. 执行结果:
              2. 1*1=1	1*2=2	2*2=4	1*3=3	2*3=6	3*3=9	1*4=4	2*4=8	3*4=12	4*4=161*5=5	2*5=10	3*5=15	4*5=20	5*5=25	1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=361*7=7	2*7=14	3*7=21	4*7=28	5**7=35	6*7=42	7*7=49	1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=641*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81

                二、while 循环语句

                1. while 语句的结构

                while 语句用于重复测试某个条件,只要条件成立就反复执行命令序列。它的语法结构如下:

                while 条件测试操作do  命令序列done

                2. 使用 while 语句创建脚本

                1)批量添加用户

              3. 将用户名存放在 3.txt 文件中。
              4. 创建 while 循环语句脚本:
              5. #!/bin/bashname="zhangsan"A=1while [ $A -le 20 ]do  useradd ${name}$A >> /dev/null  echo "用户 ${name}$A 已创建"  echo "123" | passwd --stdin ${name}$A >> /dev/null  let A++done
                1. 执行脚本:
                2. chmod +x 3.sh./3.sh
                  1. 执行结果:
                  2. [root@localhost ~]# cat /etc/passwd | tail -20zhangsan1:x:1003:1003::/home/zhangsan1:/bin/bashzhangsan2:x:1004:1004::/home/zhangsan2:/bin/bash...zhangsan20:x:1022:1022::/home/zhangsan20:/bin/bash

                    2)猜商品价格游戏

                  3. 创建 4.sh 脚本:
                  4. #!/bin/bashA=$(expr $RANDOM % 100)B=0while truedo  echo -p "商品实际价格为 0-99 之间,猜猜看是多少?"  read -p "请输入你认为的价格:" C  let B++  if [ $C -eq $A ]  then    echo "恭喜你,猜对了"    echo "你总共猜了 $B 次"    exit 0  elif [ $C -gt $A ]  then    echo "太高了"  else    echo "太低了"  fidone
                    1. 执行脚本:
                    2. chmod +x 4.sh./4.sh
                      1. 执行结果:
                      2. 商品实际价格为 0-99 之间,猜猜看是多少?请输入你认为的价格:50太高了请输入你认为的价格:30太高了请输入你认为的价格:20太低了请输入你认为的价格:23恭喜你,猜对了你总共猜了 4 次

                        3)IP 和 MAC 地址采集脚本

                      3. 创建 getarp.sh 脚本:
                      4. #!/bin/bashA=248while [ $A -le 251 ]do  echo -p "例:192.168.1. 请输入你要搜索的网段:"  read -p "NET"  if ping -c 1 $NET$A >> /dev/null  then    IP=$(arping -I ens32 -c 1 $NET$A | grep "reply" | awk '{print $4}')    MAC=$(arping -I ens32 -c 1 $NET$A | grep "reply" | awk '{print $5}' | awk -F] '{print $1}' | awk -F[ '{print $2}')    echo "$IP $MAC" >> /opt/address.txt  fi  let A++done
                        1. 执行脚本:
                        2. chmod +x getarp.sh./getarp.sh
                          1. 执行结果:
                          2. [root@localhost ~]# cat /opt/address.txt192.168.1.248 00:1a:2b:3c:4d:5e192.168.1.249 00:1a:2b:3c:4d:5f...

                            三、case 多分支语句

                            1. case 语句的结构

                            case 语句用于根据变量的不同取值进行多分支处理。它的语法结构如下:

                            case  变量值  in模式1)命令序列1;;模式2)命令序列2;;...*)默认命令序列esac

                            2. 使用 case 语句创建脚本

                            1)检查用户输入的字符类型

                          3. 创建 5.sh 脚本:
                          4. #!/bin/bashread -p "请输入一个字符,并按Enter键确认:" Acase $A in[0-9])  echo "你输入的是数字";;[a-z]|[A-Z])  echo "你输入的是字母";;*)  echo "你输入的是空格、功能键或其他控制字符";;esac
                            1. 执行脚本:
                            2. chmod +x 5.shsh 5.sh
                              1. 执行结果:
                              2. 请输入一个字符,并按Enter键确认:6你输入的是数字请输入一个字符,并按Enter键确认:y你输入的是字母请输入一个字符,并按Enter键确认:@你输入的是空格、功能键或其他控制字符

                                2)根据文件扩展名自动选择相应的解压选项

                              3. 创建 znjy.sh 脚本:
                              4. #!/bin/bashcase $1 in*.tar.gz)  tar zxf $1 -C /opt/gz >> /dev/null;;*.tar.bz2)  tar jxf $1 -C /opt/bz2 >> /dev/null;;*)  echo "只能解决gz和bz2方式的压缩文件";;esac
                                1. 执行脚本:
                                2. chmod +x znjy.sh./znjy.sh user.tar.gz./znjy.sh user.tar.bz2./znjy.sh aaa
                                  1. 执行结果:
                                  2. [root@localhost ~]# ll /opt/gz/ /opt/bz2/...[root@localhost ~]# ./znjy.sh user.tar.gz[root@localhost ~]# ll /opt/gz/...[root@localhost ~]# ./znjy.sh user.tar.bz2[root@localhost ~]# ll /opt/bz2/...[root@localhost ~]# ./znjy.sh aaa只能解决gz和bz2方式的压缩文件

                                    3)Apache 服务启动脚本

                                  3. 创建 fuwu.sh 脚本:
                                  4. #!/bin/bashcase $1 instart)  systemctl start httpd  echo "httpd服务已启用";;stop)  systemctl stop httpd  echo "httpd服务已关闭";;restart)  systemctl restart httpd  echo "服务已重启";;status)  netstat -anpt | grep httpd >> /dev/null  if [ $? -eq 0 ]  then    echo "httpd监听端口:$(netstat -anpt | grep httpd | awk '{print $4}')"  else    echo "httpd未启用"  fi ;;*)  echo "只能使用start,stop,restart,status参数" ;;esac
                                    1. 执行脚本:
                                    2. chmod +x fuwu.sh./fuwu.sh start./fuwu.sh stop./fuwu.sh restart./fuwu.sh status./fuwu.sh aaa
                                      1. 执行结果:
                                      2. [root@localhost ~]# ./fuwu.sh starthttpd服务已启用[root@localhost ~]# ./fuwu.sh stophttpd服务已关闭[root@localhost ~]# ./fuwu.sh restart服务已重启[root@localhost ~]# ./fuwu.sh statushttpd监听端口::::80[root@localhost ~]# ./fuwu.sh aaa只能使用start,stop,restart,status参数

    转载地址:http://niwqz.baihongyu.com/

    你可能感兴趣的文章
    OAuth2:项目演示-模拟微信授权登录京东
    查看>>
    OA系统多少钱?OA办公系统中的价格选型
    查看>>
    OA系统选型:选择好的工作流引擎
    查看>>
    OA项目之我的会议(会议排座&送审)
    查看>>
    OA项目之我的会议(查询)
    查看>>
    Object c将一个double值转换为时间格式
    查看>>
    object detection训练自己数据
    查看>>
    object detection错误之Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
    查看>>
    object detection错误之no module named nets
    查看>>
    Object of type 'ndarray' is not JSON serializable
    查看>>
    Object Oriented Programming in JavaScript
    查看>>
    object references an unsaved transient instance - save the transient instance before flushing
    查看>>
    Object.keys()的详解和用法
    查看>>
    OBJECTIVE C (XCODE) 绘图功能简介(转载)
    查看>>
    Objective-C ---JSON 解析 和 KVC
    查看>>
    Objective-C 编码规范
    查看>>
    Objective-C——判断对象等同性
    查看>>
    Objective-C之成魔之路【7-类、对象和方法】
    查看>>
    Objective-C享元模式(Flyweight)
    查看>>
    Objective-C以递归的方式实现二叉搜索树算法(附完整源码)
    查看>>