2016-12-16 11 views
0

の番号を減らすIは整数0バッシュループプリント及びカウンタ

問題があるに達したとき、次に1を繰り返すことにより、減算、印刷、整数が読み取られるバッシュのコードの小さなビットを作成しようとしてい私は各ループの後に整数$ Numberを再割当てすることができません。誰かが私が間違っていることを教えてもらえますか? bashで

if [ $Number -ne 0 -o $Number -eq 0 2>/dev/null ] 
then 
    while [ $Number -gt 1] 
    do 
    printf "$Number\n" 
    $Number=$Number-1 
done 
echo "$Number" 
fi 

答えて

1

arithmetic expansionsダブルparanthesis、又はexpr又はletを用いて行うことができます。

while [[ $Number -gt 1 ]] 
do 
    printf "$Number\n" 
    ((Number -= 1)) 
done 

テスト

$ cat prog.sh 
Number=5 
while [[ $Number -gt 1 ]] 
do 
    printf "$Number\n" 
    ((Number -= 1)) 
done 

$ bash prog.sh 
5 
4 
3 
2 
+0

私は同意することを '((...))'と 'let'は、算術評価のために使用することができるが、私はそのバックティックがそれと関係がないことを疑う。私が知る限り、バックティックはコマンド拡張である '$(...) 'の古い形式です。コマンドを実行せずに算術評価を行うバックテスト式の例を挙げてください( 'expr'や' let'、...など)? – oliv

+0

@oliv 'expr'と一緒にバックティック。 TLDP docsから*バッククォートによる算術展開(しばしばexprと併用される)*。例: – nu11p01n73R

+0

このコードsh./test 3を実行しようとしましたが、コマンドが正常に動作しませんでした。出力は無限ループに入り、見つからないと言います。 – user3807468