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