我有一个可执行的bash脚本,它从我的调制解调器中获取外部IP地址并将其上传到动态DNS服务中。该脚本附带了一个配置文件,我从脚本中获取该文件。配置文件包含调制解调器凭据的值,我的主机名的FQDN,调制解调器IP地址和" status"网址。
为了获取我的外部IP地址,我需要wget
"状态"来自我的调制解调器的网页,并执行一些grep
和sed
操作以获取外部IP。
因此,实际的grep
和sed
代码也是为每个用户定制的。
主要问题是:通常说,如果这些代码存在于conf文件或脚本本身中。
我很困惑,因为我以两种方式阅读:
我知道这可能听起来像茶杯中的风暴,但我想学习正确的方法。
另外,如果您认为正确的方法是(2),我不知道如何在配置文件中声明代码。我尝试了以下内容并且无法正常工作。我也未能在互联网上找到类似的例子。
配置:
grab_modem_ip='grep "[0-9]*\.[0-9]*\.[0-9]*\.[[0-9]*" |
grep tabdata | sed 's/\(.*\)<\/td>.*/\1/''
或
alias grab_modem_ip='grep "[0-9]*\.[0-9]*\.[0-9]*\.[[0-9]*" |
grep tabdata | sed 's/\(.*\)<\/td>.*/\1/''
(请注意,我已将整个命令包裹在'...'
- 单引号中。)
脚本
ipaddr=$( wget --user ${modemuser} --password ${modempass} "${modemsite}" -O - 2>/dev/null | "<grab_modem_ip>" )
答案 0 :(得分:1)
我认为这可能是正确的解决方案。而且我认为你的命令会解决这个问题:
ipaddr=$( wget --user ${modemuser} --password ${modempass} "${modemsite}" -O - 2>/dev/null | eval "grab_modem_ip" )
答案 1 :(得分:0)
我正在寻找的答案是&#34; Variables持有数据。函数保存代码。不要把代码放在变量中!&#34;引自Greg's Wiki
所以我把grab_modem_ip重写为一个函数,它在conf文件中定义。
grab_modem_ip()
{
echo "${1}" | grep "[0-9]*\.[0-9]*\.[0-9]*\.[[0-9]*" | grep tabdata | sed 's/\(.*\)<\/td>.*/\1/'
}
然后脚本中的调用以
完成modemstatuspage=$( wget --user ${modemuser} --password ${modempass} "${modemsite}" -O - 2>/dev/null )
ipaddr=$( grab_modem_ip "${modemstatuspage}")