linux's docs

14.3.0: 流程控制-循环语句


1. while循环语句

1) 基本语法结构:

while [ 判断表达式 ]
do
执行语句1;
执行语句2;
...
done
## 若不确定循环次数,常用while

2) done 处可以重定向输入文件内容

*****************************************
#!/bin/bash

## 这里用read来读取输入文件的每一行,这里也可以写"while read string"
while read
do
        echo good;
# 这里把$1的内容按照行传进循环
done < $1                
*****************************************
# cat while.txt
1
2
3
4
5
6
# sh while.sh
good
good
good
good
good
good

## 修改 while read 为 while read number
*****************************************
#!/bin/bash

while read string
do
    echo $stringdone < $1
*****************************************
# sh while.sh while.txt
1
2
3
4
5
6

2. for循环语句(用在确定会有几次循环的情况下)

1) 基本语法结构:

## 语法1
for (( 赋初值;条件判断;初值的变化 ))  
do
执行语句1;
执行语句2;
...
done

## 语法2
for 变量 in a b c ...
do
执行语句1;
执行语句2;
...
done


## 可以使用``来将命令的执行结果传递给for循环中的循环变量里
## 语法3
for 变量 in `cmd`
do
执行语句1;
执行语句2;
...
done

2) 扩展-``

##########
# 语法举例
#########
## 从1-10,步长默认为1
# for 变量 in `seq 1 10`

## 从10-1,步长为1
# for 变量 in `seq 10 -1 1`

## 从0-100,步长为20,但数字宽度需要一致
## -w会让所有数字都适配数字的最大宽度
# for 变量 in `seq -w 1 100`

##########
# 用法举例
##########
seq -w 0 20 100
000
020
040
060
080
100

# 扩展-ls
for i in `ls`;do echo $i;done
12.log
1.log
1.txt

# 扩展-find
for i in `find . -type d`;do echo $i;done
.
./perm
./.ssh
./fugai

# 在执行语句只有一句时,for 变量 in `cmd`也可以用管道代替
cmd | xargs -i 执行语句1

Contents