简体   繁体   中英

Is it a good idea to add a bash code snippet into a bash conf file that is sourced by a bash script?

I have an executable bash script that picks up my external ip address from my modem and uploads it in a dynamic DNS service. The script is accompanied by a configuration file which I source from the script. The configuration file holds values for modem credentials, FQDN for my hostname, modem ip address and "status" website address.

In order to pick up my external IP address, I need to wget the "status" webpage from my modem and do some grep and sed operations to grab the external IP.

So the actual grep and sed code is also custom for every user. The main question is: Canonically speaking, should such code be present in the conf file or in the script itself.

I am confused because I read this in 2 ways:

  1. it is code so it should be in the script
  2. it is variable so it should be in the config

I know this may sound like storm in a tea cup, but I would like to learn the right way.

Also, if you believe the right way is (2), I don't know how to declare the code in the configuration file. I tried the following and doesn't work. I've also not been able to find similar examples in the internet.

config:

grab_modem_ip='grep "[0-9]*\.[0-9]*\.[0-9]*\.[[0-9]*" |
    grep tabdata | sed 's/\(.*\)<\/td>.*/\1/''

or

alias grab_modem_ip='grep "[0-9]*\.[0-9]*\.[0-9]*\.[[0-9]*" |
    grep tabdata | sed 's/\(.*\)<\/td>.*/\1/''

(Notice that I have wrapped the whole command in '...' — single quotes.)

script

ipaddr=$( wget --user ${modemuser} --password ${modempass} "${modemsite}" -O - 2>/dev/null | "<grab_modem_ip>" )

I think that maybe 2 the correct solution. And I think that your command will solve using this:

ipaddr=$( wget --user ${modemuser} --password ${modempass} "${modemsite}" -O - 2>/dev/null | eval "grab_modem_ip" )

The answer I was looking for was "Variables hold data. Functions hold code. Don't put code inside variables!" as quoted from Greg's Wiki

so I rewrote grab_modem_ip as a function, that is defined in the conf file.

grab_modem_ip()
{
  echo "${1}" | grep "[0-9]*\.[0-9]*\.[0-9]*\.[[0-9]*" | grep tabdata | sed 's/\(.*\)<\/td>.*/\1/'
}

Then invokation in the script is done as

modemstatuspage=$( wget --user ${modemuser} --password ${modempass} "${modemsite}" -O - 2>/dev/null )
ipaddr=$( grab_modem_ip "${modemstatuspage}")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM