2017-04-18 125 views
1

我有我製作的這個腳本。只循環腳本

#!/bin/bash 

R=$[ (RANDOM % 25) + 1 ] 
c=$[ (RANDOM % 80) + 1 ] 
CO=$[ (RANDOM % 7) + 1 ] 

tput setf $CO 
tput cup $R $C 
echo "New Position" 

該腳本被寫入以跳過屏幕回顯「新位置」並更改顏色。我的問題是,我是否需要將它循環10次,並且我在互聯網上找到的所有示例都使用某種位置參數輸入。或某種類型的輸入變量。我一直在使用

for now in {1..10} 
do 
my script starting at tput 
sleep 1 
done 

嘗試,但它不能正常工作或拋出一個錯誤代碼,並充當如果添加腳本的多餘的部分都沒有了。

任何幫助將不勝感激如何改造我的腳本與for循環工作,不需要位置參數。

+1

如果你只遍歷'tput'部分,隨機數只設置一次;你必須循環你的整個腳本。 –

+2

此外,'$ []'是古老的,甚至沒有爲Bash記錄,你應該使用'$(())'代替。 –

+0

所以我需要循環減速以及? – Grunt

回答

1

您必須將整個腳本放在for循環中;該變量只設置一次,否則,看着他們的價值觀不重複時,他們首先定義了什麼事:

#!/bin/bash 

for now in {1..10}; do 
    r=$(((RANDOM % 25) + 1)) 
    c=$(((RANDOM % 80) + 1)) 
    co=$(((RANDOM % 7) + 1)) 

    tput setf $co 
    tput cup $r $c 
    echo "New Position" 
done 

tput sgr0 

我也換成$[ ]通過$(()),因爲前者已被棄用(甚至沒有記錄對於Bash),用小寫字母替換大寫變量名(大寫字母爲reserved for environment variables used by the shell and utilities),並在循環後重置顏色。

最後,儘管引用tput cup "$r" "$c"中的變量幾乎總是一種很好的做法,但這裏並不需要,因爲我們知道它們將是沒有空格的數字–,但它也不會傷害。