2017-11-30 5 views
0

次のコードは、進捗バーをHTMLページに表示しています。それは正常に動作しますが、多くのコード行にまで及んでいます。IF文をFORまたはWHILEに変換する(シェルスクリプト)

QUESTION:
- どのように私はその機能を複製、forまたはwhileループにこれを変換するに行きますか?

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 % |||||

ある場合たとえば、私の出力は以下のようであるが、事前にありがとうございます。

答えて

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 4141% |||||を印刷します。以下の少しのwhileループでは、0〜100の文字列が変数$stringに格納され、出力されます。

barsは、印刷するバーの数を格納します。 10%あたり1バー。その後、printfseqは、|bars回の印刷に使用されます。

これでうまくいけば、コードをクリーンアップする正しい道が開けます。

+0

返信する時間を取ってくれてありがとうジョン。魅力のように動作します。私はこれを私のプログラムで以下のコードだけで適合させることができました。もし "[$ per_usage" -le100] && ["$ per_usage" -ge 0];なら、get_string(){ per_usage = "$ 1" ; echo -en "$ {per_usage}%\ t" printf "%0.s |" $(seq 1 $ bars) エコー fi } –

+0

大歓迎です!うれしいことはあなたのために働いた。 –

関連する問題