我是脚本新手,遇到困难。我需要转换以下内容:
MYIP=`ifconfig eth0 | grep 'inet addr'| awk '{print $2}' | cut -d ':' -f 2`;
变成这样:
MYIP=curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
我正在“编写”一个脚本,每当我的外部 IP 发生变化时,该脚本都会向我发送电子邮件。我根据在网上找到的零碎信息将其拼凑起来,但我无法让它工作。第一个代码只是向我发送带有我的内部 IP 的通知。
第二段代码用于确定我的全局 IP,但似乎不起作用。我收到错误消息:
./filename.sh: line 5: -s: command not found
(第 5 行是上面发布的第二段脚本)
请帮我解开这个谜题的最后一块碎片。谢谢。
答案1
你需要 Bash 的命令替换在两行中。
MYIP=$(ifconfig eth0 | grep 'inet addr'| awk '{print $2}' | cut -d ':' -f 2)
MYIP=$(curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//')
您已经` ... `
在第一行使用了命令替换语法,但是$( ... )
通常建议使用该语法。
您可以在那里继续阅读有关 Bash 的两种命令替换语法:
http://wiki.bash-hackers.org/syntax/expansion/cmdsubst
答案2
除了 ByteCommander 已经说过的之外,你不需要那么多管道。只要让curl
输出给它awk
,它就可以处理这项工作。你可以使用一个管道或bash
进程替换。我使用了最后一个
awk -F ':' '{print "Current IP:"substr($2,0,14)}' < <(curl -s checkip.dyndns.org)
答案3
另一种获取当前全球 IP 的简单方法是使用 ,而不需要删除awk
或或任何多余的字符:sed
dig
dig +short myip.opendns.com @resolver1.opendns.com
这将只返回您的 IP。