Linux 金字塔 的shell命令,Shell脚本编程 流程控制—循环

循环:重复执行所指定的代码片段,直到循环条件不满足,则退出循环

一、for循环

语法格式:

for 变量名 in 列表

do

循环体

done

for循环运行格式,依次将列表中的元素赋值给变量名,而后执行一次循环体,直到列表中的元素耗尽 则退出循环

列表的生成:

1.直接给出列表

2.整数列表:seq 1 n或{1..100}

3.命令引用

4.变量引用

[root@CentOS6 ~]# cat for.sh

#!/bin/bash

#

for I in {1..10}

do

echo $I

done

[root@CentOS6 ~]# bash for.sh

1

2

3

4

5

6

7

8

9

10

[root@CentOS6 ~]#

for特殊用法:

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

do

循环体

done

循环之前判断条件表达式是否成立,如果成立,则执行一次循环体,然后执行修正表达式做修正,再吃判断条件表达式是否成,成立则循环,否则退出

[root@CentOS6 ~]# cat for.sh

#!/bin/bash

#

for ((I=1;I<=10;I++))

do

echo $I

done

[root@CentOS6 ~]# bash for.sh

1

2

3

4

5

6

7

8

9

10

[root@CentOS6 ~]#

for创建死循环:

for ((;1;))

do

echo "hello"

done

无限输出hello,按Ctrl+c退出循环

二、while循环

语法格式:

while CONDITION

do

循环体

done

在做循环之前CONDITION是否成立,如果条件成立,执行一次循环体,直到条件不满足为止,因此,在循环体中我们一般会对CONDITION做修正

进入条件:CONDITION为true

退出条件:CONDITION为false

[root@CentOS6 ~]# cat while1.sh

#!/bin/bash

#

declare -i I=1

while [ $I -le 10 ]

do

echo $I

let I++

done

[root@CentOS6 ~]# bash while1.sh

1

2

3

4

5

6

7

8

9

10

[root@CentOS6 ~]#

while特殊用法:

while read 变量名

do

循环体

done < /PATH/TO/SOMEFILE

依次读取SOMEFILE文件中的每一行,并赋值给所指定的变量,而后执行循环体

我们在处理文本文件时经常会用到这种格式

[root@CentOS6 ~]# cat whilefile.sh     显示/root/for.sh文件中的每一行

#!/bin/bash

#

while read LINE

do

echo $LINE

done 

[root@CentOS6 ~]# bash whilefile.sh

#!/bin/bash

#

for ((;1;))

do

echo "hello"

done

[root@CentOS6 ~]#

while死循环:

while true

do

循环体

done

条件测试语句永久为真,循环体将永久执行,按Ctrl+c退出循环

三、until循环

语法格式:

until CONDITION

do

循环体

done

循环之前判断CONDITION是否为假,如果为假,执行一次循环体,直至CONDITION为真结束循环

进入条件:CONDITION为假

退出条件:CONDITION为真

[root@CentOS6 ~]# cat until.sh     #打印1到10之间的整数

#!/bin/bash

#

declare -i I=1

until [ $I -gt 10 ]

do

echo $I

let I++

done

[root@CentOS6 ~]# bash until.sh

1

2

3

4

5

6

7

8

9

10

[root@CentOS6 ~]#

until创建死循环

until false

do

循环体

done

CONDITION条件永久为假,循环体永久执行,按Ctrl+c停止循环

循环控制语句:

continue:当满足一定条件时,提前结束第N层的循环,而直接进入下一次循环判断

break:当满足一定条件时,提前结束第N层循环

下面我们来做几个示例:

1.添加user1-user10是个用户密码同用户名

[root@CentOS6 ~]# cat user.sh

#!/bin/bash

#

for I in $(seq 1 10)

do

if ! id user$I &> /dev/null;then

useradd user$I

echo user$I:user$I | chpasswd

echo "Add user$I finishd."

else

echo "user$I exists."

fi

done

[root@CentOS6 ~]# bash user.sh     #添加10个用户完成

Add user1 finishd.

Add user2 finishd.

Add user3 finishd.

Add user4 finishd.

Add user5 finishd.

Add user6 finishd.

Add user7 finishd.

Add user8 finishd.

Add user9 finishd.

Add user10 finishd.

[root@CentOS6 ~]# bash user.sh     #如果用户已添加,则显示用户已经存在

user1 exists.

user2 exists.

user3 exists.

user4 exists.

user5 exists.

user6 exists.

user7 exists.

user8 exists.

user9 exists.

user10 exists.

[root@CentOS6 ~]#

2.编写脚本,测试10.1.252.1-254所有主机在线状态

[root@CentOS6 ~]# cat ip.sh

#!/bin/bash

#

echo "测试10.1.252.1-254所有主机在线状态"

NETWORK="10.1.252."

Red="\033[31m"

Green="\033[32m"

End="\033[0m"

declare -i UP=0

declare -i DOWN=0

for I in $(echo ${NETWORK}{1..254})

do

if ping -c 1 -W 1 $I &> /dev/null;then

echo -e "${Green}$I IP is up.$End"

echo $I >> /root/up.txt

let UP++

else

echo -e "${Red}$I IP is down.$End"

echo $I >> /root/down.txt

let DOWN++

fi

done

echo "host up is $UP."

echo "host down is $DOWN."

[root@CentOS6 ~]#

[root@CentOS6 ~]# bash ip.sh

测试10.1.252.1-254所有主机在线状态

10.1.252.1 IP is down.

10.1.252.2 IP is down.

10.1.252.3 IP is down.

10.1.252.4 IP is down.

10.1.252.5 IP is down.

10.1.252.6 IP is down.

10.1.252.7 IP is up.

10.1.252.8 IP is down.

...

3.打印99乘法表

[root@CentOS6 ~]# cat 99.sh

#!/bin/bash

#

for I in $(seq 1 9)

do

for J in $(seq 1 $I)

do

echo -n -e "${J}X${I}=$[${J}*${I}]\t"

done

echo

done

[root@CentOS6 ~]# bash 99.sh

1X1=1

1X2=22X2=4

1X3=32X3=63X3=9

1X4=42X4=83X4=124X4=16

1X5=52X5=103X5=154X5=205X5=25

1X6=62X6=123X6=184X6=245X6=306X6=36

1X7=72X7=143X7=214X7=285X7=356X7=427X7=49

1X8=82X8=163X8=244X8=325X8=406X8=487X8=568X8=64

1X9=92X9=183X9=274X9=365X9=456X9=547X9=638X9=729X9=81

[root@CentOS6 ~]#

4.打印nn金字塔

[root@CentOS7 bin]# cat jinzita.sh

#!/bin/bash

#

read -p "请输入要打印的行数:" INT

for ((LINES=1;LINES<=INT;LINES++))

do

for ((Space=0;Space<=$[$INT-$LINES];Space++))

do

echo -n " "

done

for ((Xing=1;Xing<=$[$LINES*2-1];Xing++))

do

echo -n -e "\033[31m*\033[0m"

done

echo

done

[root@CentOS7 bin]# bash jinzita.sh

请输入要打印的行数:10

*

***

*****

*******

*********

***********

*************

***************

*****************

*******************

[root@CentOS7 bin]#

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值