簡體   English   中英

bash腳本正確解釋awk

[英]bash script interpreting awk correctly

我有一個for循環腳本,需要登錄到主機並獲取其主機名和eth0接口的值。 我正在使用下面的代碼,但是在bash腳本上運行時無法正確讀取awk命令

    #!/bin/bash

for i in `cat test.txt`;

do

store_number=$(ssh -q -A -o userknownhostsfile=/dev/null -o stricthostkeychecking=no -o batchmode=yes -o connecttimeout=5 "$i" "hostname | cut -c4-7");

eth0_ip=$(ssh -q -A -o userknownhostsfile=/dev/null -o stricthostkeychecking=no -o batchmode=yes -o connecttimeout=5 "$i" "sudo ifconfig eth0 | awk 'FNR==2 {print $2}'");

output="${store_number}: ${eth0_ip}"; echo $output >> /home/eth0status.txt;

done

輸出如下:

0021: inet addr:10.1.10.62 Bcast:10.1.10.255 Mask:255.255.255.0

0022: inet addr:10.0.1.74 Bcast:10.0.1.255 Mask:255.255.255.0

0023: inet addr:172.16.16.103 Bcast:172.16.16.255 Mask:255.255.255.0

我需要的輸出是這樣的:

0021: addr:10.1.10.62 

0022: addr:10.0.1.74

0023: addr:172.16.16.103

謝謝你的幫助

報價是一個難題。 當你寫:

eth0_ip=$(ssh ... "$i" "sudo ifconfig eth0 | awk 'FNR==2 {print $2}'");

內部單引號''不能阻止$2擴展。 Shell看到$2雙引號。 它將執行變量擴展,很有可能未設置第二個參數(腳本為$2 )。 測試一下:

$ echo "sudo ifconfig eth0 | awk 'FNR==2 {print $2}'"
sudo ifconfig eth0 | awk 'FNR==2 {print }'

請轉義$ ,或在外部使用單引號,或者按照其他人的建議,在SSH命令外部使用awk

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM