我正在尝试编写一个连接到远程服务器的脚本,ping其他服务器(IP作为参数)并输出结果。
所以这就是我写的:
#!/bin/bash
# IP as argument
IP=$1
# Remote connection
ssh -p 22 pinger@tester.myserver.com
# Pinging and saving only latency results to RESULT
RESULT=`ping -i 2 -c 4 $IP | grep icmp_seq | awk '{print $7}' | cut -b 6-12`
# Outputs the result
echo $RESULT
但是我收到了一个错误:
Name or service not known name tester.myserver.com
当然tester.myserver.com
只是示例,但如果我用我的真实远程服务器地址手动输入该ssh命令,它确实有用。所以我真的不知道为什么这不能用作脚本。
答案 0 :(得分:2)
将相应的行更改为:
RESULT=`ssh pinger@tester.myserver.com "ping -i 2 -c 4 ${IP}" | grep icmp_seq | awk '{print $7}' | cut -b 6-12`
或没有awk:
RESULT=`ssh pinger@tester.myserver.com "ping -i 2 -c 4 ${IP} | grep icmp_seq | sed 's/^.*time=\([0-9.]\+\).*/\1/'"`
问候
答案 1 :(得分:1)
因此,发送要在远程服务器上执行的命令或命令列表的常用方法如下:
ssh user@remote.server "<your commands go here>"
或在你的情况下:
ssh -p 22 pinger@tester.myserver.com "ping -i 2 -c 4 $IP | grep icmp_seq | awk '{print \$7}' | cut -b 6-12"
注意&#34; \&#34;在7美元之前逃避&#34; $&#34;。这可以防止在运行ssh命令时将$ 7计算为局部变量$ 7(可能设置或不设置),将$ 7与其他命令保持在正确的上下文中。
你仍然需要为它设置$ IP才能工作,所以一起看起来像这样:
IP = $1
ssh -p 22 pinger@tester.myserver.com "ping -i 2 -c 4 $IP | grep icmp_seq | awk '{print \$7}' | cut -b 6-12"
现在$ IP在本地解析,而$ 7则远程解析。
当我尝试连接到远程服务器以运行某些命令并使用本地变量时,我有a similar problem to yours - 就像你使用$ IP一样。