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)
上一篇 2016-08-21 20:47
下一篇 2016-08-21 20:47

相关推荐

  • Linux命令学习

    阅读目录 Linux cat命令 file命令 dd命令 hexdump命令 cat命令   cat三大功能:      1.一次显示整个文件:cat filename      2.从键盘创建一个文件:cat > filename 注意只能创建新文件,…

    Linux干货 2017-07-16
  • lvm 逻辑卷 和 网络管理

    lvm 逻辑卷 和 网络管理 逻辑卷管理器(LVM) LVM:      Logical Volume Manager, Version: 2  dm: device mapper:     将一个或多个底层块设备组织成一个 逻辑设备的模块   设备名:     /dev/d…

    Linux干货 2016-09-01
  • Linux文件管理和Bash特性

    一、Linux基本文件管理命令 主要介绍cp、mv、rm命令的基本用法以及使用示例 cp命令 cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录 cp (选项) (参数) 常用选项: -a:此参数的效果和同时指定”-dpR”参数相同,用于实现归档; -d:复制符号链接文件本身,而非其指向的源文件; -f:强行复制文件或目录,不论目标文件或目录是…

    Linux干货 2017-07-09
  • 学习一个星期的沿途体会

    人生处处都是坑,只看跳的深不深。下面就来介绍介绍我跳的坑吧!当然我可没打算在此长眠 既然选择了Liunx,那对它的历史就得了解清楚。就如同我们结婚,既然选择了对方,那就要了解他的过去,包容他的未来。           Linux操作系统是一个叫Linus Torvalds的大学生在1991年开发而来。当然,…

    2017-07-16
  • grep命令

    alias命令 直接输入 alias 命令会列出当前系统中所有已经定义的命令别名。 例一:列出当前系统中所有已经定义的命令别名。 [root@localhost ~]# alias alias cp=’cp -i’ alias egrep=’egrep –color=auto’ alias fgrep=’fgrep –color=auto’ alias …

    Linux干货 2016-01-09

评论列表(1条)

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

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