bash学习记录(七)循环和分支(1)

循环和分支

循环

循环就是一块当条件为真的迭代的代码块。

for循环

for arg in [list] 这是最基础的循环形式。如果do和for在一行里,那么就需要在do前面加分号如:for arg in list ;do

1
2
3
4
for arg in list
do
.. commend(s)
done

for循环有很多用法,举几个例子来了解一下for循环都能够干些什么吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# for i in "hello world !" # 这样当作整个字符串
for i in hello world !
do
echo $i
done
# 与命令结合
if [ -e "/bin/bash" ]
then
echo "is exist"
fi

# 输出当前目录下匹配文件的内容 类似使用find命令
FILE="*txt"
for file in $FILE
do
echo "Contents of $file"
echo "------------------"
cat "$file"
echo
done

# 如果in list内容缺失就表示使用 in $@ 也就是所有传进来的参数
for a
do
echo "$a"
done
#通过使用命令来构造for循环的list
for b in `ls`
do
echo $b
done

# 使用for循环输出用户的信息
PASSWORD_FILE=/etc/passwd
n=1
for name in $(awk 'BEGIN{FS=":";}{print $1}'< "$PASSWORD_FILE")
do
echo "USER #$n=$name"
let "n+=1"
done

#使用函数给for循环作值
give_parm(){
echo "1 2 3 5 6"
}
for c in $(give_parm)
do
echo $c
done

# 类C语言的for循环
for (( ai=1;ai<5;ai++))
do
echo $ai
done

while循环

while循环用来测试一个条件,并且一直循环直到条件为true也就是退出码为0的时候退出循环。一般while循环用在提前不知道循环次数的时候。while循环使用中括号把条件括起来,也可以使用双中括号。

1
2
3
4
while [condition]
do
····commends
done

当while有多个条件的时候,只有最后一个参数会决定循环次数

1
2
3
4
5
6
7
8
9
10
11
while echo "previous-variable = $previous"
echo
previous=$var1
[ "$var1" != end ] # Keeps track of what $var1 was previously.
# Four conditions on *while*, but only the final one controls loop.
# The *last* exit status is the one that counts.
do
echo "Input variable #1 (end to exit) "
read var1
echo "variable #1 = $var1"
done

也有类似C语言的while条件。

1
2
3
4
5
6
7
8
while (( a <= LIMIT ))   #  Double parentheses,
do # + and no "$" preceding variables.
echo -n "$a "
((a += 1)) # let "a+=1" 算数运算
# Yes, indeed.
# Double parentheses permit incrementing a variable with C-like syntax.
# 双小括号允许递增一个变量使用类C的运算方式
done

同样的while后的条件可以是一个函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
condition ()
{
((t++))
if [ $t -lt 5 ]
then
return 0 # true
else
return 1 # false
fi
}
while condition
# ^^^^^^^^^
# Function call -- four loop iterations.
do
echo "Still going: t = $t"
done

while可以和read命令进行结合,形成 while read 结构体,能够有效的读和处理文件。

1
2
3
4
while read line
do
echo $line #读取1.txt中的每一行
done < 1.txt

until循环

until循环是和while循环正好相反,until会一直进行循环,直到条件变为false;

1
2
3
4
until [ condition-is-true ]
do
command(s)...
done
-------------本文结束感谢您的阅读-------------

本文标题:bash学习记录(七)循环和分支(1)

文章作者:NanYin

发布时间:2018年06月11日 - 17:06

最后更新:2019年08月12日 - 13:08

原始链接:https://nanyiniu.github.io/2018/06/12/2018-06-11-bash_07_bash%E4%B8%AD%E7%9A%84%E5%BE%AA%E7%8E%AF%E5%92%8C%E5%88%86%E6%94%AF/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。