循环往复shell开路

Friday, March 27, 2020

while 循环

while循环的逻辑:

while [ 条件测试 ]
do
    做某些事
done

也可以这样:

while [ 条件测试 ];do
    做某些事
done

例子:

#!/bin/bash
while [ -z $response ] || [ $response != 'yes' ]
do
    read -p 'say yes:' response
done

若输入的字符串不是 “yes” 或者没有输入任何字符,程序会一直请求。

until 循环

例:

#!/bin/bash
until [ "$response" = 'yes' ]
do
    read -p 'say yes:' response
done

运行结果和上述while循环的例子一样。

for 循环

遍历列表

for循环可以遍历一个“取值列表”,基本的逻辑如下:

for 变量 in '值1' '值2' ... '值n'
do
    做某些事
done

例:

#!/bin/bash
for animal in 'dog' 'cat' 'pig'
do
    echo "animal being analyzed:$animal"
done

for 循环的取值列表不一定要在代码中定义好,也可以用一个变量,如:

#!/bin/bash

for file in `ls`
do
    echo "file found:$file"
done

改进:当复制当前目录下以所有以.sh结尾的文件,并且把每个副本的名字修改为“现有名字 + ‘-copy’”的格式。

#!/bin/bash
for file in `ls *.sh`
do
    cp $file $file-copy
done

更常规的for循环

借助seq命令,实现类似主流编程语言中的for循环用法。
seq是sequence的缩写。
例:

#!/bin/bash
for i in `seq 1 10`
do
    echo $i
done

seq 1 10会返回一个取值列表,从1到10的整数值,echo会遍历输出1到10这10个整数。

可以修改默认的取值间隔(1),如下:

#!/bin/bash
for i in `seq 1 2 10`
do
    echo $i
done

seq 1 2 10会返回一个取值列表,从1到10的整数值,取值间隔是2,输出1,3,5,7,9五个整数。

LinuxShell

一朝shell函数倾斗转星移任我行

条件一出shell不服

comments powered by Disqus