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

相关推荐

  • N25第一周学习总结

    第一周学习总结 按照课程要求,本周完成2天的课时,总计8课时。 因为是刚开课,马哥为我们介绍了上课环境,课程体系,还有一些计算机基础理论。内容主要是:          计算机的工作机制        &nbs…

    Linux干货 2016-12-04
  • Bash的基础特性之命令执行状态返回值和命令行展开

    Bash的基础特性之命令的执行状态 Linux的命令执行结果状态有两种,分别为:1、成功2、失败bash使用特殊变量 $? 保存最近一条命令的执行状态结果使用echo $? 命令来查看命令执行状态返回值:0:成功1-255:失败 示例:         [root@localho…

    Linux干货 2016-11-04
  • rpm

    软件运行环境 API:Application Programming Interface     POSIX:Portable OS 程序源代码–> 预处理–> 编译–> 汇编–> 链接   &nb…

    Linux干货 2016-08-21
  • redis

    redis 简述 redis的数据结构 redis的数据持久化实现 程序与配置文件 redis-cli命令 主从复制原理与架构实现 redis的高可用方案 – sentinel redis分布式系统概述与简介 简述 什么是redis? redis是一个基于nosql技术的kv数据库,支持非常大的并发场景,与memcached不同的是,redis拥…

    Linux干货 2016-08-19
  • 笔记四、Linux基础入门-上半部

    前言 直接已经教大家如何创建虚拟机和安装CentOS 操作系统了,那么今天就来开始入门吧。linux对于新手来说并不难,linux的构造 http://www.178linux.com/68853 这篇博客里我已经讲解了,有兴趣最好看一下llinux下每个目录的作用。还有Linux的哲学思想。 这里我就开始介绍了。 一、用户登陆   &n…

    2017-02-23
  • Linux基础知识(五)

    1、显示当前系统上root、fedora或user1用户的默认shell [root@server01 ~]# cat /etc/passwd | grep –color=auto -E "^root|fedora|user1" | cut -d : -f 1,7 2、找出/etc/rc.d/init.d/functions文…

    Linux干货 2016-10-25

评论列表(1条)

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

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