2016-12-16 49 views
0

我想創建的在擊代碼其中整數被讀取時,打印小一點,則減去1,並重復當整數達到0擊循環打印和減少數量計數器

的問題是我無法在每個循環後重新分配整數$ Number。有人可以告訴我我做錯了什麼嗎?

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

在bash的arithmetic expansions可使用雙paranthesis,或exprlet來完成。

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文檔,*帶反引號的算術擴展(通常與expr結合使用)*。例如 – nu11p01n73R

+0

我試圖執行這個代碼,sh ./test 3,但命令無法正常工作。輸出會進入無限循環,並且會說沒有找到。 – user3807468