将IF语句转换为FOR或WHILE(Shell脚本)

时间:2017-11-30 03:42:57

标签: shell scripting

以下代码在HTML页面上显示进度条。它运行良好,但占用了很多代码。

问题:
- 我如何将其转换为forwhile循环,复制其功能?

if [ $per_usage -ge 1 ] && [ $per_usage -le 10 ]
    then
        indg="|"
        indb=""
        indr=""
elif [ $per_usage -gt 10 ] && [ $per_usage -le 20 ]
    then
        indg="||"
        indb=""
        indr=""
elif [ $per_usage -gt 20 ] && [ $per_usage -le 30 ]
    then
        indg="|||"
        indb=""
        indr=""
elif [ $per_usage -gt 30 ] && [ $per_usage -le 40 ]
    then
        indg="||||"
        indb=""
        indr=""
elif [ $per_usage -gt 40 ] && [ $per_usage -le 50 ]
    then
        indg="|||||"
        indb=""
        indr=""
elif [ $per_usage -gt 50 ] && [ $per_usage -le 60 ]
    then
        indg="|||||"
        indb="|"
        indr=""
elif [ $per_usage -gt 60 ] && [ $per_usage -le 70 ]
    then
        indg="|||||"
        indb="||"
        indr=""
elif [ $per_usage -gt 70 ] && [ $per_usage -le 80 ]
    then
        indg="|||||"
        indb="|||"
        indr=""
elif [ $per_usage -gt 80 ] && [ $per_usage -le 90 ]
    then
        indg="|||||"
        indb="||"
        indr="||"
elif [ $per_usage -gt 90 ]
    then
        indg=""
        indb=""
        indr="||||||||||"
else
        indg=""
        indb=""
        indr=""
fi

例如,我的输出就像per_usage值是41

41 % |||||

提前谢谢。

1 个答案:

答案 0 :(得分:0)

这种事情可以很容易地循环:

#!/bin/bash

get_string () {
    per_usage="$1"
    if [ "$per_usage" -le 100 ] && [ "$per_usage" -ge 0 ]; then
        echo -en "${per_usage}%\t"
        bars=$(($per_usage / 10 + 1))
        printf "%0.s|" $(seq 1 $bars)
        echo
    fi
}

i=0
while [ "$i" -le 100 ]; do
    string=$(get_string "$i")
    echo "$string"
    let i++
done

在此示例中,get_string函数可用于根据输入数生成字符串。例如,get_string 41将打印41% |||||。在下面的小while循环中,0 - 100的字符串存储在$string变量中并打印出来。

bars存储要打印的小节数。每10%只需一个酒吧。然后printfseq用于打印| bars次。

希望通过这种方式,您将能够正确地清理代码。