-rwxr-xr-x | bin/changedns | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/bin/changedns b/bin/changedns new file mode 100755 index 0000000..4760a67 --- a/dev/null +++ b/bin/changedns @@ -0,0 +1,111 @@ +#!/bin/bash + +SN="`basename $0`" # base portion of our filename +AE="-a" # switch to add an entry +RE="-r" # swithc to remove an entry +EL="/tmp/resolv.conf" # expected location of the system nameserver config file +ARGS="$@" # friendly variable name for all args + +usage(){ + echo "usage: +$SN -a {ip} [{ip}...] +$SN -r {ip} [{ip}...]" +} + +#if are there at least two arguments? +if [ "$#" -gt 1 ] +then + + #remove any old resolv.conf file + rm .resolve.conf .resolve.old .resolve.new 2> /dev/null + + #cast current nameserver file into OLD + cat "$EL" > .resolve.old + + #build IP list + for ARG in $ARGS + do + if [ "$ARG" != "$1" ] + then + IP_LIST=`echo "$IP_LIST $ARG"` + fi + done + + #select case on first switch + case "$1" in + + #case '-a' + "$AE" ) + + #for each IP in IP_LIST + for IP in $IP_LIST + do + #add nameserver entery to .newfile + echo "nameserver $IP" >> .resolve.conf + + #cat OLD into grep excluding IP lines, + #storing results into NEW + cat .resolve.old | grep -v "$IP" > .resolve.new + + #set OLD to NEW + cat .resolve.new > .resolve.old + + done + + #cat OLD onto end of .newfile + cat .resolve.new >> .resolve.conf + + #clean up work files + rm .resolve.new .resolve.old + + #move old conf file to old conf file.bak + mv "$EL" "$EL.bak" + + #move .newfile to resolve.conf file + mv .resolve.conf "$EL" + + echo "Added $IP_LIST to $EL" + ;; + + #case '-r' + "$RE" ) + + #for each IP in IP_LIST + for IP in $IP_LIST + do + #cat OLD into grep excluding IP lines, + #storing results into NEW + cat .resolve.old | grep -v "$IP" > .resolve.new + + #set OLD to NEW + cat .resolve.new > .resolve.old + + done + + #move old conf file to old conf file.bak + mv "$EL" "$EL.bak" + + #move .newfile to resolve.conf file + mv .resolve.new "$EL" + + echo "Removed $IP_LIST from $EL" + + ;; + + #case else + * ) + + usage + ;; + + + #end switch + esac + +#else +else + + usage + +#end +fi |