Ping

如何從文件中列印多個值?

  • April 18, 2019
#!/bin/bash
COUNT=100
SIZE=100
INTERVAL=0.2
for myHost in `cat /files0/home/singhtr/input`
do
   echo $myHost

   ping -i $INTERVAL -q -n -s  $SIZE -c $COUNT $myHost|grep -i packet

done

輸入文件:

# cat input
4.2.2.2 abc ATT
8.8.8.8 def BCC

如何從這樣的輸入文件中列印多個值

預期輸出:

IP of the device: 4.2.2.2
Device Name: abc
customer name:ATT
2 packets transmitted, 2 received, 0% packet loss, time 1001ms

等等,隨著循環的進行。

我想通過 bash/shell 腳本來實現這一點。

#!/bin/bash
while read myHost
do
   COUNT=100
   SIZE=100
   INTERVAL=0.2
   IP=$(echo $myHost | cut -d " " -f1)
   NAME=$(echo $myHost | cut -d " " -f2)
   CUSTOMER=$(echo $myHost | cut -d " " -f3)
   PING=$(ping -i $INTERVAL -q -n -s  $SIZE -c $COUNT $IP | grep -i packet)
   echo "IP of the device: $IP"
   echo "Device name: $NAME"
   echo "Customer name: $CUSTOMER"
   echo "$PING"
   echo ""
done < /files0/home/singhtr/input

這是您的問題的一種可能的解決方案。您可以使用cut來選擇field要輸出的內容。然後用一個簡單的echo命令輸出它。要一次讀取文件一行,您可以使用

while read LINE
do
...
done < FILE

編輯

如果您想定期執行腳本,您應該考慮創建一個cronjob. 您可以鍵入 crontab -l以查看cronjobs目前登錄使用者的身份。如果您想安排一個cronjob,您可以執行以下操作:

$ crontab -e

通過插入例如編輯 crontab:

*/15 * * * * /path/to/script >> /path/to/log_\`date +%s\` 2>&1

這將創建一個每 15 分鐘cronjob在該位置執行一次腳本的腳本,/path/to/script並將其寫入輸出 + 可能發生在/path/to/log_帶有 unix 時間戳後綴的文件中的錯誤(例如 1549883612)。

引用自:https://unix.stackexchange.com/questions/499888