2014-04-15 83 views
0

我目前正在模擬一個Bash腳本來模擬滾動一些6面骰子。這一切都發生在運行Debian的虛擬機中,該虛擬機充當服務器。本質上,我的網頁通過使用查詢字符串來模擬滾動骰子來確定擲骰子的數量。使用Bash在動態網頁上模擬滾動骰子

例如,如果我的網址是http://127.0.0.1/cgi-bin/rolldice.sh?6,我希望網頁說「你滾了6個骰子」,然後在下一行打印出6到6之間的6個數字(當然是「隨機」生成的)。

當前,打印出「You rolled x dice」標題正常。但是,我在下一部分遇到麻煩。我對Bash很陌生,所以可能是我的循環語法或類似的錯誤。這是它:

for i in {1..$QUERY_STRING }; do 
     dieRoll = $(($RANDOM % 6 + 1)) 
     echo $dieRoll 
done 

任何人都可以幫助我找出我要去哪裏錯了嗎?如果需要,我會很樂意發佈rolldice.sh的其餘部分。

+0

你不能把變量放在'{x..y}'裏面。 – Barmar

+0

那麼我應該如何去執行計數循環? – foobar1209

回答

1

由於..需要它的參數是文字,你必須使用eval替代變量:

for i in $(eval "echo {1..$QUERY_STRING}"); do 

或者,如果你有seq命令,你可以這樣做:

for i in $(seq 1 "$QUERY_STRING") 

我推薦後者 - 使用eval與來自用戶的輸入是非常危險的。

+0

謝謝,這工作!然而,出於好奇:爲什麼在處理用戶輸入時使用'eval'是「危險的」? – foobar1209

+0

@ aricha1940因爲[eval is evil](http://mywiki.wooledge.org/BashFAQ/048) – BroSlow

+0

@ aricha1940假設用戶提供包含'; rm *' – Barmar