Linux运维养成记-结构化命令二

1. for 命令

1.1 for 基本用法

bash shell 提供 for命令,用来处理循环迭代值,其基本格式如下:

for var in list
do
	command
done	
#list 参数中是你提供的一系列需要迭代的值

1.2 读取列表中的值

for命令最基本的用法就是遍历命令自身定义的一系列值,例:

#例 1:
[root@localhost tmp]# cat test1
#!/bin/bash
for i in A B C
do
	echo This is $i
done

[root@localhost tmp]# ./test1 
This is A
This is B
This is C

#例 2:
[root@localhost tmp]# cat test2
#!/bin/bash
for i in A "B C" D
do
	echo This is $i
done

[root@localhost tmp]# ./test2
This is A
This is B C
This is D
#如果循环列表中有词组,需用引号括起来被视为一个整体,否则会被拆开处理

1.3 从变量中读取列表

我们也可以将一系列变量储存在一个变量值里然后再遍历这个变量,例:

[root@localhost tmp]# cat test3
#!/bin/bash

var="A B C"

for i in $var
do
	echo This is $i
done

[root@localhost tmp]# ./test3
This is A
This is B
This is C

1.4 从命令读取值

下面是for从命令中读取值:

[root@localhost tmp]# cat data
A B C

[root@localhost tmp]# cat test4
#!/bin/bash
for i in $(cat data)
do
	echo This is $i
done

[root@localhost tmp]# ./test4
This is A
This is B
This is C

1.5 更改字段分隔符

系统内有一个特殊的环境变量 IFS,它叫做内部字段分隔符。正因如此,bash shell 会将下列字符当做字段分隔符:

  • 空格
  • 制表符
  • 换行符
    我们可以通过更改 IFS的值来自定义需要的字段分隔符,如修改IFS值,使其只识别换行符:
IFS=$'\n'

警告:
一般实际运用中,为安全考虑,在更改IFS值之前应前将其值保存在一个变量中,这样使用完自定义IFS之后,再将其还原:

IFS_ori=$IFS
IFS=$'\n'
<代码段>
IFS=$IFS_ori		#用完之后改为系统默认值

此外,如果想指定多个字段分隔符可以使用如下命令:

IFS=$'\n':;"
#这个值将会把换行符,冒号,分号,双引号作为分隔符

1.6 C 语言风格的 for 命令

shell 也提供 C 语言风格的 for 命令,但不同的是这里需要在 for 语句中加两个括号(()),例:

[root@localhost tmp]# cat test5
#!/bin/bash
for (( i=1; i<10; i++ ))
do
	echo This is $i
done
[root@localhost tmp]# ./test5
This is 1
This is 2
This is 3
This is 4
This is 5
This is 6
This is 7
This is 8
This is 9

2. while 命令

while 命令可以想成是 iffor的结合体,它需要定义一个测试条件,一旦条件为真,则进入循环体,执行一组命令。

2.1 while 的基本格式

while test command
do
	commands
done

例:

[root@localhost tmp]# cat test6
#!/bin/bash

var=10

while [ $var -ge 0 ]
do
	echo This is $var
	var=$(($var-1))
done
[root@localhost tmp]# ./test6
This is 10
This is 9
This is 8
This is 7
This is 6
This is 5
This is 4
This is 3
This is 2
This is 1
This is 0

3. 循环控制

这里有两个命令可以控制循环,如下:

  • break
  • continue

下面介绍这些命令的使用方法。

3.1 break 命令

break 命令是退出循环的一种方法,我们可以用它退出任意类型的循环,包括forwhile

3.1.1 退出单个循环

例1:

[root@localhost tmp]# cat test7
#!/bin/bash
for i in 1 2 3 4 5
do
	if [ $i -eq 4 ]
	then
		break
	fi
	echo This is $i
done
[root@localhost tmp]# ./test7
This is 1
This is 2
This is 3
#当 i 等于 4 是跳出循环

例 2:

[root@localhost tmp]# cat test8
#!/bin/bash

var=1
while [ $var -le 5 ]
do
	if [ $var -eq 4 ]
	then
		break
	fi
	echo This is $var
	var=$(($var+1))
done
[root@localhost tmp]# ./test8
This is 1
This is 2
This is 3
#当 i 等于 4 是跳出循环

3.1.2 跳出内部循环

break处理循环时,它会跳出它所在的当前循环,即是最内层的循环,并不会跳出外循环。
例:

[root@localhost tmp]# cat test9
#!/bin/bash
for i in 1 2 3 4 5
do
	echo OUT is $i
	for j in 7 8 9 10
	do
		if [ $j -eq 9 ]
		then
			break
		fi
		echo "	IN is $j"
	done
done
#这里 break只会跳出它所在内循环内,而不会影响外部循环
[root@localhost tmp]# ./test9
OUT is 1
	IN is 7
	IN is 8
OUT is 2
	IN is 7
	IN is 8
OUT is 3
	IN is 7
	IN is 8
OUT is 4
	IN is 7
	IN is 8
OUT is 5
	IN is 7
	IN is 8

3.1.3 跳出外部循环

有时在内部循环,但是又需要直接跳出外部循环,这是可以使用:

break n
#n 表示跳出的循环层级

例:

for i in 1 2 3 4 5
do
	echo OUT is $i
	for j in 7 8 9 10
	do
		if [ $j -eq 9 ]
		then
			break2
		fi
		echo "	IN is $j"
	done
done
#这里 break 跳出 2 层循环后,刚好跳出最外层循环
[root@localhost tmp]# ./test10
OUT is 1
	IN is 7
	IN is 8

3.2 continue 命令

continue可以终止当前循环,但不会直接跳出循环而是直接进入下一次循环,不会执行 continue 的命令,例:

[root@localhost tmp]# cat test11
#!/bin/bash

var=0
while [ $var -le 5 ]
do
	var=$(($var+1))
	if [ $var -eq 4 ]
	then
		continue
	fi
	echo This is $var
done
#这里 continue 跳过了 var 等于 4 的情况而直接进入下一次循环,也即是 var=5 的情况
[root@localhost tmp]# ./test11
This is 1
This is 2
This is 3
This is 5
This is 6

此外,continue也支持像break那样带参数:

continue n
#n 表示要继续执行那一层循环
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值