我似乎无法在我的shell脚本中分配一堆变量。我试图将HOST1,HOST2,HOST3分配给三个不同的机器名称。
我的脚本如下:
#!/bin/bash
#
set -vx
FIXHOSTS=`cat /tmp/fixHosts.txt`
NUMBER=1
NUMBEROFHOSTS=`cat /tmp/fixHosts.txt | wc -l`
for line in $FIXHOSTS
do
HOST$NUMBER=$line
echo $HOST1
((NUMBER = $NUMBER + 1))
done
echo $HOST1
echo $HOST2
echo $HOST3
echo $HOST4
fixHosts.txt包含以下内容:
wayne-000
wayne-002
wayne-003
这是我得到的输出:
for line in $FIXHOSTS
do
HOST$NUMBER=$line
echo $HOST1
((NUMBER = $NUMBER + 1))
done
+ for line in '$FIXHOSTS'
+ HOST1=wayne-000
fvwmtest.sh: line 15: HOST1=wayne-000: command not found
+ echo
+ (( NUMBER = 1 + 1 ))
+ for line in '$FIXHOSTS'
+ HOST2=wayne-002
fvwmtest.sh: line 15: HOST2=wayne-002: command not found
+ echo
+ (( NUMBER = 2 + 1 ))
+ for line in '$FIXHOSTS'
+ HOST3=wayne-003
fvwmtest.sh: line 15: HOST3=wayne-003: command not found
+ echo
+ (( NUMBER = 3 + 1 ))
#done
echo $HOST1
+ echo
echo $HOST2
+ echo
echo $HOST3
+ echo
echo $HOST4
+ echo
他们为什么不回声?为什么他们没有被分配?
答案 0 :(得分:0)
动态变量在bash中可能非常烦人。 declare
命令可以提供帮助:
$ num=13
$ val="hello world"
$ declare "host$num=$val"
$ echo $host13
hello world
所以你想要:
num=0
while read -r line; do
((num++))
declare host$num="$line"
done < /tmp/fixHosts.txt
num_hosts=$num
echo $host1 $host2 $host3 ...
注意:
更简单的是使用数组:如果你有bash版本4
mapfile -t hosts < /tmp/fixHosts.txt
num_hosts=${#hosts[@]}
echo ${hosts[0]} ${hosts[1]} ${hosts[2]} ...