将bash代码段添加到由bash脚本提供的bash conf文件中是一个好主意吗?

时间:2015-03-12 11:10:17

标签: linux bash shell

我有一个可执行的bash脚本,它从我的调制解调器中获取外部IP地址并将其上传到动态DNS服务中。该脚本附带了一个配置文件,我从脚本中获取该文件。配置文件包含调制解调器凭据的值,我的主机名的FQDN,调制解调器IP地址和" status"网址。

为了获取我的外部IP地址,我需要wget"状态"来自我的调制解调器的网页,并执行一些grepsed操作以获取外部IP。

因此,实际的grepsed代码也是为每个用户定制的。 主要问题是:通常说,如果这些代码存在于conf文件或脚本本身中。

我很困惑,因为我以两种方式阅读:

  1. 它是代码所以它应该在脚本中
  2. 它是变量所以它应该在config
  3. 我知道这可能听起来像茶杯中的风暴,但我想学习正确的方法。

    另外,如果您认为正确的方法是(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>" )
    

2 个答案:

答案 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}")