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

相关推荐

  • LAMP架构实验1

    LAMP架构实验 — 基础架构搭建 实验实验拓扑图与目的 实验过程 总结与问题 实验实验拓扑图与目的 1. 实验主框架LAMP采用编译安装。 2. 分离HTTPD,PHP,MARIADB。 3. 两台服务器能够各自被访问且内容相同。 实验过程 程序包准备: apr-1.5.2.tar.gz          …

    Linux干货 2016-05-10
  • 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who user1    tty1         2016-12-27&nb…

    Linux干货 2016-12-28
  • n22-第一次作业-对Linux基础知识的回顾

    1、描述计算机的组成及其功能   根据冯诺依曼计算机体系结构模型,计算机由运算器、控制器、存储器、输入设备、输出设备五大部分组成。如上图:    运算器主要由算数逻辑单元ALU和通用寄存器组成,主要用于完成算术运算和逻辑运算。      控制器是整个计算机的控制中心,它的主要功能是周而复始…

    Linux干货 2016-08-15
  • 查找 -数据结构

    几种查找算法:顺序查找,折半查找,分块查找,散列表 一、顺序查找的基本思想:  从表的一端开始,向另一端逐个按给定值kx 与关键码进行比较,若找到,查找成功,并给出数据元素在表中的位置;若整个表检测完,仍未找到与kx 相同的关键码,则查找失败,给出失败信息。 说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不到就失败。很明显的缺点就是查找效…

    Linux干货 2015-07-28
  • 20160810作业

    1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。           2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root…

    Linux干货 2016-08-12
  • LVM 逻辑卷管理器-缩小LV容量及快照区的建立

    LVM 逻辑卷管理器-缩小LV容量 将/dev/sdb2分区抽离出来,缩小LV容量 (1)首先查看/dev/sdb2的容量大小 [root@centos6 ~]# df -h /mnt/lvm/ Filesystem        &nbs…

    Linux干货 2016-09-19

评论列表(1条)

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

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