2017-06-02 188 views
0

我努力做到以下幾點:無法awk命令的輸出存儲到一個變量

#!/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

這與PowerShell無關... – thepip3r

+1

請看看:[我應該怎麼做當有人回答我的問題?](http://stackoverflow.com/help/someone-answers) – Cyrus

回答

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 

小心你的拼寫BTW爲您發佈的代碼示例中你有時正確(receiver)拼寫接收器和有時會錯誤(reciever) - 這可能會咬你在某些時候,當你試圖使用變量名稱,但實際使用不同的名稱,而不是翻轉ei。我明白,現在問題已經解決,以避免這個問題。

+0

@JonathanLeffler - 感謝您的更正。 –