我正在尝试执行以下操作:
#!/bin/bash
echo "Enter Receiver HostNames (comma separated hostname list of receivers):"
read receiverIpList
receiver1=`$receiverIpList|awk -F, '{print $1}'`
echo $receiver1
当我运行脚本时,我遇到错误。
./test1.sh
Enter Receiver IP Addresses (comma separated IP list of receivers):
linux1,linux2
./test1.sh: line 6: linux1,linux2: command not found
有人可以告诉我脚本中有什么问题吗?
答案 0 :(得分:1)
您尝试使用的语法是:
receiver1=`echo "$receiverIpList"|awk -F, '{print $1}'`
但你的做法是错误的。只需将输入直接读入bash数组并使用:
$ cat tst.sh
echo "Enter Receiver HostNames (comma separated hostname list of receivers):"
IFS=, read -r -a receiverIpList
for i in "${!receiverIpList[@]}"; do
printf '%s\t%s\n' "$i" "${receiverIpList[$i]}"
done
$ ./tst.sh
Enter Receiver HostNames (comma separated hostname list of receivers):
linux1,linux2
0 linux1
1 linux2
即使你出于某种原因不想这样做,你仍然不应该使用awk
,只使用bash替换或类似的,例如:
$ foo='linux1,linux2'; bar="${foo%%,*}"; echo "$bar"
linux1
请注意你的拼写顺序,就像在你发布的代码示例中一样,你有时拼写接收器正确(receiver
),有时不正确(reciever
) - 这可能会让你在某些时候咬你我试图使用变量名称,但实际上使用的是另一个变量名称,而不是翻转ei
。我认为现在已经修复了这个问题以避免这个问题。