shell编程--流程控制for,do-while,if-then,break,continue,case等

2.5 流程控制

2.5.1 if语法

1、语法格式

if condition 
then 
    statements 
[elif condition 
    then statements. ..] 
[else 
    statements ] 
fi

 

2、示例

#!/bin/bash

read -p "please input your name:" NAME      ###read命令用于从控制台读取输入数据

printf '%s\n' $NAME

if [ $NAME = root ]                       ##注意if和后面的[]有间距

then

    echo "hello ${NAME},welcome!"

elif [ $NAME = toto ]

then

    echo "hello ${NAME},welcome!"

else

    echo "SB,get out here!"

fi

脚本内容截图:

3、判断条件

1/ 条件判断基本语法

[ condition ]   (注意condition前后要有空格)

#非空返回true,可使用$?验证(0为true,>1为false)

[ itcast ]

#空返回false

[  ]

 

注意[  ]内部的=周边的空格,有区别:


[root@shizhan01 scripts]# if [ a = b ];then echo ok;else echo notok;fi

notok

[root@shizhan01 scripts]# if [ a=b ];then echo ok;else echo notok;fi

ok

 

短路(理解为三元运算符)

[ condition ] && echo OK || echonotok

         条件满足,执行&&后面的语句;条件不满足,执行|| 后面的语句

 

2/ 条件判断组合

注:[] 与[[ ]] 的区别:[[ ]] 中逻辑组合可以使用 &&  || 符号

而[] 里面逻辑组合可以用  -a   -o


[root@mini ~]# if [ a = b && b = c ]; then echo ok;else echo notok;fi

-bash: [: missing `]'

notok

 

[root@mini ~]# if [ a = b -a b = b ]; then echo ok;else echo notok;fi

notok

[root@mini ~]# if [ a = b -o b = b ]; then echo ok;else echo notok;fi

ok

 

[root@mini ~]# if [[ a = b && b = b ]]; then echo ok;else echo notok;fi

notok

[root@mini ~]# if [[ a = b || b = b ]]; then echo ok;else echo notok;fi

ok

 

 

3/ 常用判断运算符

字符串比较:=    !=     

-z 字符串长度是为0返回true

-n 字符串长度是不为0返回true

if [ 'aa' = 'bb' ]; then echo ok; else echonotok;fi

if [ -n "aa" ]; then echo ok;else echo notok;fi

if [ -z "" ]; then echo ok; elseecho notok;fi

 

整数比较:

-lt 小于

-le 小于等于

-eq 等于

-gt 大于

-ge 大于等于

-ne 不等于

 

 

文件判断:

-d 是否为目录

if [ -d /bin ]; then echo ok; else echonotok;fi

-f 是否为文件

if [ -f /bin/ls ]; then echo ok; elseecho notok;fi

-e 是否存在

if [ -e /bin/ls ]; then echo ok; elseecho notok;fi

 

2.5.2 while语法

1、方式一

while expression

do

command

done

 

2、方式二

i=1

while ((i<=3))

do

 echo $i

  leti++

done

 

while.sh脚本的内容如下:


#!/bin/bash

i=1

while((i<=3))

do

    echo $i

    let i++

done

while2.sh的脚本内容如下:


#!/bin/bash

echo '按下 <CTRL-D> 退出'

echo -n '输入你最喜欢的电影名:'

while read FILM

do

    echo "是的! $FILM 是一部好电影"

done

 

2.5.3 case语法

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常量。匹配发现取值符合某一模式后,其间所有命令开始执行直至;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令不再继续其他模式。如果无一匹配模式,使用星号*捕获该值,再执行后面的命令。

下面的脚本提示输入1到4,与每一种模式进行匹配:

case.sh案例如下:


#!/bin/bash

echo '输入 1 到 4 之间的数字:'

echo '你输入的数字为:'

read aNum

case $aNum in

    1) echo '你选择了 1 '

    ;;

    2) echo '你选择了 2'

    ;;

    3) echo '你选择了 3'

    ;;

    4) echo '你选择了 4'

    ;;

    *) echo '你没有输入 1 到 4之间的数字'

    ;;

esac

运行结果:


[root@hadoop test]# sh case.sh

输入 1 到 4 之间的数字:

你输入的数字为:

4

你选择了 4

[root@hadoop test]# sh case.sh

输入 1 到 4 之间的数字:

你输入的数字为:

3

你选择了 3

 

再如例子case2.sh


#!/bin/bash

 

case $1 in

start)

    echo "starting"

    ;;

stop)

    echo "stoping"

    ;;

*)

    echo "Usage:{start | stop}"

esac

运行结果:


[root@hadoop test]# sh case2.sh start

starting

 

2.5.4 for语法

1、方式一

#!/bin/bash

 

for N in 1 2 3

do

    echo $N

done


运行结果:

[root@hadoop test]# sh for.sh

1

2

3


#!/bin/bash

 

for N in {1..5}

do

    echo $N

done


运行结果:

[root@hadoop test]# sh for.sh

1

2

3

4

5

 

再如如下例子:


[root@hadoop test]# ls

a.sh      b.sh      case.sh      for.sh      hello.sh  login.log  while2.sh

break.sh  case2.sh  continue.sh  fortest.sh  if.sh     test.txt   while.sh

[root@hadoop test]# cat fortest.sh

#!/bin/bash

for shname in `ls *.sh`

do

    name=`echo "$shname" | awk -F. '{print $1}'`

    echo $name

done

[root@hadoop test]# sh fortest.sh

a

break

b

case2

case

continue

for

fortest

hello

if

while2

while

通过shell来统一放开端口

一简单的字符串 枚举遍历法,利用for in格式对字符串按空格切份的功能

SERVICES="80   22   25   110   8000   23   20   21   3306   "

for   x   in   $SERVICES    
  do     
  iptables   -A   INPUT   -p   tcp   --dport  $x   -m   state   --state   NEW   -j   ACCEPT     
  done

 

2、方式二

for ((i = 0; i <= 5; i++))

do

         echo"welcome $i times"

done

for ((i = 0; i <= 5; i++)); do echo"welcome $i times"; done

 

定义for2.sh


#!/bin/bash

for ((i=0;i<=5;i++))

do

    echo "welcome $i times"

done


运行结果如下:

[root@hadoop test]# sh for2.sh

welcome 0 times

welcome 1 times

welcome 2 times

welcome 3 times

welcome 4 times

welcome 5 times

 

2.5.5.跳出循环

在循环过程中,有时候需要在未达到循环结束条件时跳出循环,Shell使用两个命令来实现该功能:break和continue。

break命令

break命令允许跳出所有循环(终止执行后面的所有循环)

下面的例子中,脚本进入死循环直到用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break名。


#!/bin/bash

while :

do

    echo -n "输入 1 到 5 之间的数字:"

    read aNum

    case $aNum in

        1|2|3|4|5) echo "你输入的数字为 $aNum!"

        ;;

        *)

            echo "你输入的数字不是 1 到 5 之间的!游戏结束"

        break

    esac

done

执行以上的代码,输入结果为:


[root@hadoop test]# sh break.sh

输入 1 到 5 之间的数字:5

你输入的数字为 5!

输入 1 到 5 之间的数字:7

你输入的数字不是 1 到 5 之间的!游戏结束

continue

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。对上面的例子进行修改:


#!/bin/bash

while :

do

    echo -n "输入 1 到 5 之间的数字:"

    read aNum

    case $aNum in

        1|2|3|4|5) echo "你输入的数字为$aNum!"

        ;;

        *) echo "你输入的数字不是 1 到 5 之间的!"

             continue

             echo "游戏结束"

        ;;

    esac

done

运行代码,结果如下:


[root@hadoop test]# sh continue.sh

输入 1 到 5 之间的数字:7

你输入的数字不是 1 到 5 之间的!

输入 1 到 5 之间的数字:2

你输入的数字为2!

输入 1 到 5 之间的数字:2

你输入的数字为2!

输入 1 到 5 之间的数字:5

你输入的数字为5!

 

时间: 2024-09-13 15:32:38

shell编程--流程控制for,do-while,if-then,break,continue,case等的相关文章

【SHELL 编程基础第二部分】SHELL里的流程控制、SHELL里的函数及脚本调试方法!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/shell/764.html 对于Shell书写和概念上一篇已经有所介绍,那么本篇继续学习Shell编程一些语法知识: 首先介绍Shell中的流程控制,例如判断语句等等- if语句: 首先了解几个知识: [ -f "somefile" ] :判断是否是一个文件 [ -x "/bin/ls" ] :判断/bin/l

Linux shell编程基础 七、流程控制

流程控制 if-then if 条件; then 动作 fi if-then-else if 条件; then 动作1 else 动作2 fi if 条件1; then 动作1 elif 条件2; then 动作2 else 动作3 fi for for 变量 in 列举 do 命令 done while while 条件 do 命令 done until until 条件 do 命令 done break continue break跳出当前循环,continue提前进入下一次循环

Java编程那些事儿42—流程控制综合练习

5.6.2 综合练习 本部分是一些整理的关于流程控制部分的综合练习,可以通过这些练习熟悉Java语言的基本语法,以及锻炼逻辑思维能力. 练习题: 1.计算数字12和18的最小公倍数. 2.如果苹果 1元/个, 桔子 2 元/个, 芒果 4元/个,若是用10元去买,有几种组合呢? 3.一只猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个,第10天早上想再吃时,发现只剩下一个桃子了.请问猴子第一天一

Java编程那些事儿39—流程控制综合示例

5.6 综合示例 在一般的学校学习流程控制时,重点是放在流程控制的相关语法,其实为了能成为一个合格的程序员,仅仅学好语法是远远不够的,还需要通过大量的练习来适应程序设计语言的思维方式,并且熟练地把自己的解决问题的步骤形成代码,这些都需要通过大量的阅读代码和编写代码来实现. 所以在学习流程控制时,重点是解决实际的问题,而不是仅仅停留在语法层面上,这个是很多在校学生学习程序时最突出的一个问题. 在遇到一个实际问题时,首先要能够思考出解决这个问题的数学步骤或逻辑步骤,然后才能编写对应的代码,所以遇到实

Java编程那些事儿30—流程控制基础

第五章流程控制 流程就是指程序执行的顺序,流程控制就是指通过控制程序执行的顺序实现要求的功能.流程控制部分是程序中语法和逻辑的结合,也是程序中最灵活的部分,是判断一个程序员能力的主要方面. 众所周知,算法是程序逻辑的核心,而算法的绝大部分代码都是流程控制实现的. 流程控制就是将程序员解决问题的思路,也就是解决问题的步骤,使用程序设计语言的语法格式描述出来的过程. 5.1 流程控制基础 流程控制在程序语言实现时,通过三类控制语句进行实现: l顺序语句 顺序语句是一种自然的语句,没有特定的语法格式,

Linux C编程与Shell编程在开发实用工具方面的相同点总结

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1712280 以whois包中的mkpasswd的源码mkpasswd.c文件为例,    两者都需要做的事情:         (1)在程序运行前需要满足其运行环境,包括声明需要使用哪些库哪些文件,例如C中的条件编译,Shell编程中的部分条件判断,如文件是否存在.是否可执行         (2)具备灵活性和可移

跟老男孩学Linux运维:Shell编程实战.

Linux/Unix技术丛书 跟老男孩学Linux运维: Shell编程实战 老男孩 著 图书在版编目(CIP)数据 跟老男孩学Linux运维:Shell编程实战 / 老男孩著. -北京:机械工业出版社,2017.1 (Linux/Unix技术丛书) ISBN 978-7-111-55607-7 I. 跟- II. 老- III. Linux操作系统 IV. TP316.85 中国版本图书馆CIP数据核字(2016)第313248号 跟老男孩学Linux运维:Shell编程实战 出版发行:机械工

Shell编程入门

Shell编程     在DOS 中,你可能会从事一些例行的重覆性工作,此时你会将这些重覆性的命令写成批次档,只要执行这个批次档就等於执行这些命令.大家会问在UNIX中是否有批次处理这个东东,答案是有的.在UNIX中不只有如DOS 的批次处理,它的功能比起DOS 更强大,相对地也较复杂,已经和一般的高阶语言不相上下.在UNIX中大家都不叫做批次档,而叫做Shell Script. 一般而言,Shell Script的地位和其它的可执行档(或命令)是完全相同的,只不过Shell Script是以文

Shell编程基础

本文作者:Leal 授权许可: 创作共享协议 GNU自由文档许可证 编辑人员:FireHare, Dbzhang800 我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): #!/bin/sh ... 注意:最好使用"!/bin/bash"而不是"!/bin/sh",如果使用tc shell改为tcsh,其他类似. 符号#!用来告诉系统执行该脚本的程序,本例使用/bin/sh