2017-09-08 7 views
2

私はラズベリーパイでのbashスクリプト作成スキルを強化しようとしています。私は、ユーザーからの情報を取りたい、このスクリプトでbashのforループで他の変数の "part"に変数の値を割り当てる方法は?

: - 各リレー を閉じると、ループはそれに精通しているためにそれを最大限にやろうとするための時間 - リレーの閉鎖 の数。

他の変数の一部に変数を代入するときに問題があります。 私はsleepコマンドを入力しようとしているループのセクションで見ることができます。私はunderstadとして、私は、メモリ内の4つの変数があります:pausetime17pausetime18pausetime22、およびpausetime23をので、私はちょうどループ内でそれらを介して行きたい:

from z in 17 18 22 23 
do 
    sleep $pausetim$z 
done 

しかし、エラーがシェルに上昇します。私は間違って何をしていますか?おかげさまで

echo "Enter the number of repeats" 
read numbertime 
for k in 17 18 22 23 
do 
    echo "Enter time for relay $k" 
    read pausetime$k 
done 

for j in 17 18 22 23 
do 
    echo $j > /sys/class/gpio/export 
    echo out > /sys/class/gpio/gpio$j/direction 
done 

for ((i=1; i<=$numbertime; i++)) 
do 
    for z in 17 18 22 23 
    do 
     echo 1 > /sys/class/gpio/gpio$z/value 
     sleep $pausetime${!z} 
     echo 0 > /sys/class/gpio/gpio$z/value 
     sleep $pausetime${!z} 
    done 
done  

for j in 17 18 22 23 
do 
echo $j > /sys/class/gpio/unexport 
done 
+0

多分配列変数を使うべきです。 http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_10_02.html – ymonad

+0

はい、私はこの方法を考えました。私は散発的な状況のための単純な変数でそれを行うことができたことを知りたがっています。 – HuskyTheFur

+0

しないでください。変数名や実行可能コードが動的に変更されると、デバッグが困難な状況が発生します。この場合、配列を使用するのは難しくありません。 –

答えて

0

としては、それはbashの4つの変数は、もしrefname属性

$ declare -n varref=pausetime$z 
$ echo $varref 
1 
を持つことができますので、しかし、これは変数間接

pausetime17=1 
z=17 
varname=pausetime$z 

echo ${!varname} 

で行うことができないための良い方法ではないかもしれないコメントで言いました

しかし、割り当ては参照された変数に影響します

$ varref=10 
$ echo $pausetime17 
10 
$ unset varref 
$ echo $pausetime17 
## nothing ## 
+0

ありがとうございました。それはあなたの助言を受けて動作します。あなたが書いたように私は作った。 17 18 22 23 \tのZのために行う \t \tエコー1>/SYS /クラス/ GPIO/GPIOの$ Z /値 \t \t tempvar =休止時間$ Z \t \t睡眠$ {!tempvar} \t \tエコー0 >/sys/class/gpio/gpio $ z/value \t \t sleep $ {!tempvar} \t done – HuskyTheFur

関連する問題