Bash 命令替换语法(用于确定我的全局 IP 的脚本)

Bash 命令替换语法(用于确定我的全局 IP 的脚本)

我是脚本新手,遇到困难。我需要转换以下内容:

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或或任何多余的字符:seddig

dig +short myip.opendns.com @resolver1.opendns.com

这将只返回您的 IP。

相关内容