shell编程中的三种流程控制

流程控制

v 一 、过程式编程语言:

1.顺序执行

2.选择执行

3.循环执行

 条件选择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 实例

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

if ping -c1 -W2 station1 &> /dev/null; then

echo 'Station1 is UP'

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

then

echo 'Station1 is undergoing maintenance

else

echo 'Station1 is unexpectedly DOWN!'

exit 1

fi 

条件判断:case

case 用 变量引用 in           

PAT1)

分支1

;;

PAT2)

分支2

;;

*)

默认分支

;;

esac

 

case 支持glob 风格的通配符:

*: 任意长度任意字符

?: 任意单个字符

[] :指定范围内的任意单个字符

循环

 循环执行

将某代码段重复运行多次

重复运行多少次:

循环次数事先已知

循环次数事先未知

有进入条件和退出条件

 for, while, until

for 循环

v for 变量名 in 列表;do

循环体

done

v 执行 机制 :

依次 将列表中的元素赋值给“变量名”; 每次赋值后即执

行一次循环体; 直到列表中的元素耗尽,循环

for 循环

v 列表生成方式:

(1) 直接给出 列表

(2) 整数列表:

(a) {start..end}

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

(3) 返回列表的 命令

$(COMMAND)

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

(5) 变量引用;

$@, $*

  while 循环

v while CONDITION; do

循环体

done

v CONDITION :循环控制条件;进入循环之前,先做一次判

断;每一次循环之后会再次做判断;条件为“true” ,则执行

一次循环;直到条件测试状态为“false” 终止循环

v 因此:CONDTION 一般应该有循环控制变量;而此变量的值

会在循环体不断地被修正

v 进入条件:CONDITION true; ;

v 退出条件:CONDITION false

 until CONDITION; do

循环体

v done

v : 进入条件: CONDITION false

v : 退出条件: CONDITION true

 创建无限循环

v while true; do

循环体

v done

v until false; do

循环体

 Done

while 循环的特殊用法(遍历文件的每一行):

while read line; do

循环体

done < /PATH/FROM/SOMEFILE

 依次读取/PATH/FROM/SOMEFILE 文件中的每一行,且将

行赋值给变量line

 双小括号方法,即(()) 格式,也可以用于算术运算

 双小括号方法也可以使bash Shell 实现C 语言风格的变量操作

#I=10

#((I++))

v for 循环的特殊格式:

for (( 控制变量初始化; 条件判断表达式; 控制变量的修正表达式))

do

循环体

done

v 控制变量初始化:仅在运行到循环代码段时执行一次

v 控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算

,而后再做条件判断

 break 命令可以带一个参数,一个不带参数的break 循环只能退出最内层的循环,而break N可以退出N 层循环。

 continue 命令也可以带一个参数,一个不带参数的continue 命令只去掉本次循环的剩余代码,而continue N 将会把N 层循环剩余的代码都去掉,但是循环的次数不变。

#!/bin/sh  

for i in "a b c d"

 do   

  echo "$i "

 for j in `seq 10`  

    do  

      if [ $j -eq 5 ];then

        break  

      fi         

      echo "$j "

    done

  echo      

 done  

break结果:

 a 1 2 3 4

 b 1 2 3 4

 c 1 2 3 4

 d 1 2 3 4

 continue结果:

 a 1 2 3 4 6 7 8 9 10

 b 1 2 3 4 6 7 8 9 10

 c 1 2 3 4 6 7 8 9 10

 d 1 2 3 4 6 7 8 9 10

 continue 2的结果:

 a 1 2 3 4

 b 1 2 3 4

 c 1 2 3 4

 d 1 2 3 4

 作业题

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

blob.png

2.求100以内所有正整数之和

blob.png

结果:

blob.png

3.编写脚本,通过ping命令探测10.1.252.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。

结果:
blob.png

代码:

#!/bin/bash

read -p "please input a IPv4(eg:10.1.0.100):" ip

  up=0 down=0

  ipv4=`echo $ip|cut -d. -f1-3`

  n=1

until [ $n -gt 255  ]

do

IP="$ipv4"."$n"

#for ipv in {0..255} ;do

 #  IP="$ipv4"."$ipv"

let n++

   ping "$IP" -c 1 -W 1 &>/dev/null && echo "The Up IPv4 is:$IP" && let up+=1 &>/dev/null || let down+=1 &>/dev/null

done

 echo "IPv4($ipv4.1-255) up is :$up"

 echo "IPv4($ipv4.1-255) down is :$down"

   blob.png

4.编写脚本,打印九九乘法表

代码:

#/bin/bash

i=1

j=1

until (($i>=10))

do

j=1

until (($j>$i))

do

sum=$[ $j*$i ]

echo -ne "$i*$j=$sum \t"

if [ $i == $j ] ;then

echo -en "\n"

      fi

     let j++

done

     let i++

done

结果:

 blob.png

代码:

blob.png

5.编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者

blob.png

blob.png

6.编写脚本,实现打印国际象棋棋盘

blob.png

blob.png

7.打印等腰三角形

代码:
blob.png

结果:

blob.png

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

(0)
yywan1314yywan1314
上一篇 2016-08-21
下一篇 2016-08-21

相关推荐

  • 磁盘管理之LVM

    1、什么是LVM     LVM(Logical Volume Manager)逻辑卷管理,是linux环境下将一种将一个或多个硬盘的分区在逻辑上集合来呈现给上层应用,对磁盘实现动态管理的机制。相对于普通的磁盘分区有很大的灵活性,使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。 2、专业术语     &nbsp…

    Linux干货 2016-09-02
  • RAID and LVM

    RAID          Redundant Arrays of  inexpensive(Independent)Disks,RAID:容错式廉价磁盘阵列,容错式独立磁盘阵列,简称RAID,由加利福尼亚大学伯克利分校(University of California-Berkeley)在1988…

    Linux干货 2016-09-02
  • Linux运维之路基础学习四

    当文件的权限不能满足某个用户时,ACL是一个好办法

    Linux干货 2017-12-03
  • shell的基本使用

    小知识: 在bash环境中变量有各自的范围,有些的变量无法超出自己本身的范围,也无法更改自己, 或提升自己的能力范围 用source命令执行脚本,会对里面的变量发生改变包括范围 例:命令行中写name=wang 脚本中写name=xdg  先命令行,再脚本,最后命令行的顺序依次执行 1.正常的执行脚本 ./file.sh  输出的结果: …

    Linux干货 2017-08-05
  • Bash学习基础知识一“命令”

    Bash 学习基础知识 目录 一、Shell是个啥? 二、BASH的命令     2.1 命令的语法格式     2.2 什么是命令     2.4 命令的类型     …

    Linux干货 2015-04-03
  • 关于find命令的实际应用

    1、查找/var目录下属主为root,且属组为mail的所有文件 2、查找/var目录下不属于root、lp、gdm的所有文件 3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件 4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件 5、查找/etc目录下大于1M且类型为普通文件的所有文件 6、查找/e…

    Linux干货 2016-08-16

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-21 22:18

    文章对shell脚本的语法总结的很详细,同时也通过练习来加深自己对脚本的认识了,排版方面需要用点心思,希望写出优秀的博文。