Shell流程控制语句for

  for语法格式:

1
2
3
4
5
6
7
8
9
for 变量 in 参数列表
do
    命令
done
 
或者
for 变量 in 参数列表 ; do
    命令
done

  for语句流程控制图:

  实例:

1
2
3
4
5
6
7
8
9
10
11
[root@youxi1 ~]# vim a.sh
#!/bin/bash
for var in a1 a2 b1 b2
do
 echo $var
done
[root@youxi1 ~]# sh a.sh
a1
a2
b1
b2

  参数列表可以更复杂些,部分特殊符号需要转义

1
2
3
4
5
6
7
8
9
10
[root@youxi1 ~]# vim b.sh
#!/bin/bash
for var in I\'m "hello world" "c1 c2 d1 d2"
do
 echo $var
done
[root@youxi1 ~]# sh b.sh
I'm
hello world
c1 c2 d1 d2

  参数列表还可以从变量中读取,可以是多个变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@youxi1 ~]# vim c.sh
#!/bin/bash
list="e1 e2 f1 f2"
list2="hello world"
for var in $list $list2
do
 echo $var
done
[root@youxi1 ~]# sh c.sh
e1
e2
f1
f2
hello
world

  参数列表还可以从命令中取值

1
2
3
4
5
6
7
8
9
10
11
12
[root@youxi1 ~]# vim d.sh
#!/bin/bash
for var in `head -5 /etc/passwd`
do
 echo $var
done
[root@youxi1 ~]# sh d.sh
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

(1).扩展1:自定义shell分隔符

自定义Shell分隔符

(2).扩展2:C语言风格的for循环

  C语言风格的for语法格式:

1
2
3
4
for ((变量赋值;条件判断;一次循环完成后执行的操作))
do
    命令
done

  注意:变量赋值可以放在for循环外部定义,一次循环完成后执行的操作可以放在循环里面。

  实例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@youxi1 ~]# vim a.sh
#!/bin/bash
i=0
for ((;i<=10;)) ; do
 echo "Num is $i"
 let i++
done
[root@youxi1 ~]# sh a.sh 
Num is 0
Num is 1
Num is 2
Num is 3
Num is 4
Num is 5
Num is 6
Num is 7
Num is 8
Num is 9
Num is 10

  另外变量赋值和一次循环完成后执行的操作,这两部分可以存在多个变量操作,实例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@youxi1 ~]# vim a.sh
#!/bin/bash
for ((a=0,b=5;a<=10;a++,b--)) ; do
 echo "a-b="$[a-b]
done
[root@youxi1 ~]# sh a.sh 
a-b=-5
a-b=-3
a-b=-1
a-b=1
a-b=3
a-b=5
a-b=7
a-b=9
a-b=11
a-b=13
a-b=15

(3).扩展:seq命令

  seq命令获取两个数以及之间的所有整数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@youxi1 ~]# vim a.sh
#!/bin/bash
for i in `seq -5 5` ; do
 echo $i
done
[root@youxi1 ~]# sh a.sh
-5
-4
-3
-2
-1
0
1
2
3
4
5

  

posted @   苦逼运维  阅读(292)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
点击右上角即可分享
微信分享提示