如何从文件中打印多个值?

如何从文件中打印多个值?
#!/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 脚本来实现这一点。

答案1

#!/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)的文件中的错误。

答案2

呃...您需要掌握 Bash 的一些细节。 :-) 现在你已经偏离了几百码。

这应该可以帮助您开始:

#!/bin/bash

echo ----- reading one field at a time
for myhost in `cat ips`
do
        echo $myhost
done

echo
echo ----- reading and printing one line at a time

while read line
do
        echo $line
done < ips

echo ----- separating fields
while read line
do
        ip=$( cut -d' ' -f1 <<< "$line" )
        dev=$( cut -d' ' -f2 <<< "$line" )
        cust=$( cut -d' ' -f3 <<< "$line" )

        echo IP of device: $ip
        echo device name: $dev
        echo customer name: $cust

        #do your ping here
        echo
done < ips

相关详情可参见:

$ 人切

$ man bash -> “SHELL BUILTIN COMMANDS”部分,有关命令的小节

关于“<<<”:

$ man bash ->“此处字符串”部分

或使用 echo $line ... 而不是此处的字符串 (<<<)

echo $line | cut -d' ' -f1 等

相关内容