shell脚本的if语句

                              第一篇  shell脚本中的if语句

一、shell脚本的语句控制

       □前面提到了过程式编程语言有三种过程:

            顺序执行:按照顺序一条一条语句执行;

            选择执行:按照条件进行选择执行;

            循环执行:按照给定的循环条件进行循环执行。

       □其中,顺序不需要特定的控制,只需按照语句依次执行即可;选择执行,则需要特定的控制语句(如:if,case)来判断执行;循环执行则需要特定的循环控制控制(如:for,while等)。


二、使用read 命令来接受输入

       □在bash脚本编程过程当中有时程序需要与用户之间进行交互,如提示用户输入一些参数等,此时,我们可以使用read命令来完成此功能

       □语法:read [option]…[name]

                 -p :“说明信息”  (指示要显示的提示)   

                 -t :TIMEOUT

       注意:read从标准输入中读取值,给每个单词分配一个变量,所有剩余单词都被分配给最后一个变量

       示例:read -p “Enter a filename:“ FILE

三、条件选择if语句

     □选择执行:

       注意:if语句可嵌套(if是一个关键字,不是一个命令。)

     单分支

           if 判断条件;then

           条件为真的分支代码

           fi

     双分支

           if 判断条件; then

           条件为真的分支代码

           else

           条件为假的分支代码

           fi

  □多分支

          if CONDITION1; then

              if-true

          elif CONDITION2; then

              if-ture

          elif CONDITION3; then

              if-ture

               …

          else

              all-false

          fi

    从上而下逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句

   示例:

    根据命令的退出状态来执行命令

          if ping-c1-W2station1 &> /dev/null;then

          echo 'Station1isUP' 

          elif grep"station1"~/maintenance.txt &> /dev/null;then

          echo 'Station1isundergoingmaintenance‘

          else 

          echo'Station1isunexpectedlyDOWN!' exit1

          fi

四、条件判断case语句(离散值的匹配)

     □ case 变量引用in

         PAT1)

              分支1

          ;;

        PAT2)

              分支2

          ;;

        …

        *)

            默认分支

          ;;

        esac

     □case支持glob风格的通配符:

           *: 任意长度任意字符

           ?: 任意单个字符

          []:指定范围内的任意单个字符[adc](也可以表示范围[1-10])

          a|b: a或b



注意:1.if语句在使用过程中,可以实现多重嵌套,这里一定要注意书写的格式,分好层次,不要写乱了

        2.case一般是在离散值的匹配当中用的较多,一定要注意书写格式,不要写错了

        3.在写脚本的时候不能着急,要构思清新,每一种情况都要考虑到。



练习:

      1、写一个脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息

练习1.png

      2、写一个脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息

练习2.png

      3、写一个脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)

      4、写一个脚本/root/bin/checkint.sh,判断用户输入的参数是否为正整数

练习4.png


五、循环语句

    □循环执行

        将某代码段重复运行多次

    □重复运行多少次:

            循环次数事先已知

            循环次数事先未知

    □有进入条件和退出条件

    □for, while, until

六、for循环

    □语法:for 变量名in 列表;do

           循环体

            done

    执行机制

       依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束

    □列表生成方式

          (1) 直接给出列表

          (2) 整数列表:

          (a) {start..end}

          (b) $(seq[start [step]] end)

          (3) 返回列表的命令

               $(COMMAND)

          (4) 使用glob,如:*.sh

          (5) 变量引用;

               $@, $*

六、while循环

     □语法:while CONDITION; do

              循环体

                done

     CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环

       因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正

     进入条件:CONDITION为true

     退出条件:CONDITION为false


七、until循环

    □语法until CONDITION; do

        循环体

        done

    进入条件:CONDITION 为false

    退出条件:CONDITION 为true


八、循环控制语句

    1.用于循环体中

        continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层

        break [N]:提前结束第N层循环,最内层为第1层

    2.创建无限循环

        ▷while true; do

            循环体

             done

        ▷until false; do

            循环体

             done

for练习

   1、判断/var/目录下所有文件的类型

练习for1.png

   2、添加10个用户user1-user10,密码同用户名

练习for2.png

   3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的文件输出为文件加stop,以S开头的文件输出为文件名加start;

        “K34filename stop”

        “S66filename start”

for3.png

   4、写一个脚本,提示输入正整数n的值,计算1+2+3+…n的总和

for4.png

   5、写一个脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态

练习for5.png

   6、打印九九乘法表

练习for6.png

6.png

while练习

   1、求100以内所有正整数之和

while1.png

   2、通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。

while2.png

   3、打印九九乘法表

while3.png

   4、利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者

while4.png

while4-1.png

   5、打印国际象棋棋盘

while5.png

while5-1.png

while5-2.png

while5-3.png

until练习

   1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统。

until1.png

   2、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出。

until2.png


                                

原创文章,作者:zhumengxiaotao,如若转载,请注明出处:http://www.178linux.com/36300

(1)
zhumengxiaotaozhumengxiaotao
上一篇 2016-08-19 08:36
下一篇 2016-08-19 08:36

相关推荐

  • HTTP响应连接介绍

    HTTP即超文本传输协议,web站点的实现就是基于HTTP协议得以实现。本文将详细讨论HTTP。 1. HTTP协议版本: HTTP从诞生到现在一共有如下几个版本: HTTP 0.9:是最早的版本,为HTTP的原型版本,其功能非常简陋; HTTP 1.0:此版本增加了很多新特性,如cache,method,MIME等,MIME的出现让网页不再是单纯的纯文本界…

    2017-05-31
  • sed命令用法详解

    1.sed运行原理         sed(stream editor)是一个行处理器。处理时,把当前处理的行放到“模式空间中”,处理完毕后,把该行输出到屏幕,接着处理下一行;这样不断重复,直到末行;此时文件本身内容并没有改变 2.sed用途    …

    Linux干货 2016-08-15
  • N22-第三周课堂练习

    — 1.列出当前系统上所有已经登录的用户的用户名,注意:用一个用户登录多次,则只显示一次即可。     who | awk '{print $1}' | uniq 2.取出最后登录到当前系统的用户相关信息。   last | head -n 1 3.取出当前系统上被用户当作其默认shell的最多的…

    Linux干货 2016-08-30
  • 笔记整理:权限管理2-特殊权限(sst)和隐藏属性

    特殊权限 进程访问文件时的权限,取决于进程的发起者和其所在的属组。还有其他权限,包括SST(Suid【可以更改进程发起者】,Sgid【可以更改进程发起者属组】,Sticky) 查询SUID/SGID文件   find / -perm +6000 SUID 使用特点 SUID只能作用在二进制文件上。 执行者需要对该文件具有可执行权限 只在程序运行过程…

    Linux干货 2016-08-05
  • 描述LVS的工作原理

    一、LVS结构   LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡…

    Linux干货 2016-08-29
  • Linux初探

    1.计算机组成: CPU:运算器(指令集)、控制器、寄存器、缓存; 存储器:内存,RAM; Input:下指令,提供数据; Ouput:输出数据加工的结果 一般来说,从磁盘中读取程序和数据放到内存中排队,由cpu从内存中读取执行。由于cpu处理速度远大于磁盘的I/O速度,因此引入缓存。在计算机中有缓存为王这个说法。 2.操作系统的背景: 1.统一规范 2.由…

    Linux干货 2016-10-30

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-22 13:23

    都循环语句语法总结的较好,作业也完成的很出色,我们可以尝试着在写脚本的同时总结一些各个循环语句所适应的场景,以便于在以后使用过程中选择最好的语句,这样有利于我们节约脚本运行的时间,提高我们的工作效率哦。