给while循环传递输入的多种方式

2017-12-24|Categories: Magedu-training|

while循环非常适合搭配read命令读取输入,那如何用简洁的语法把输入传递给while循环呢?以下是几种常用的方法:

通过管道

diskUsedLevel=8

echo "via Pipe:"
df | grep "/dev/sd" | while read partition total used free percent mntp; do
    if [[ `echo "${percent}" | sed -r 's/^([0-9]+)%$/\1/'` -gt "${diskUsedLevel}" ]]; then
        echo "${partition} used ${percent}, which more than ${diskUsedLevel}%"
    fi
done

这里先用df | grep "/dev/sd"产生输出,然后管道给while作为输入,read逐行读取输入,共六个字段,分别赋值给六个变量。

通过进程替换

diskUsedLevel=8

echo "via Process Substitute:"
while read partition total used free percent mntp; do
    if [[ `echo "${percent}" | sed -r 's/^([0-9]+)%$/\1/'` -gt "${diskUsedLevel}" ]]; then
        echo "${partition} used ${percent}, which more than ${diskUsedLevel}%"
    fi
done < <(df | grep "/dev/sd")

这里是用<(df | grep "/dev/sd")产生输出,这就是进程替换,注意<(必须紧挨在一起,之间不能有空格。

通过重定向

如果把进程替换的代码改为一个文件路径,例如done < ~/example.txt,就可以把文件内容作为输入传递给while循环。

Leave A Comment