scripting doubts

Cameron Simpson cs at zip.com.au
Tue Aug 4 22:25:02 UTC 2009


On 04Aug2009 20:04, Arthur Meeks Meeks <arthur.meeks.luppu at gmail.com> wrote:
| I'm doing an "egrep "REPLICATION CLIENT|ALL" | wc -l" after the mysql
| -pwhatever -e "show grants for...etc" all this is redirected to a file using
| normal ">".
| So:
| for i in `cat file` do mysql -p -e "show grants etc.." "egrep "REPLICATION
| CLIENT|ALL" | wc -l > /tmp/whatever basically.
| 
| /tmp/whatever has the following "format":
| server1:0
| server2:1
| server3:0
| etc
| 
| I use another "for" to read this file and decide whether the database has
| the right privileges, if it has REPLICATION CLIENT or ALL privileges, "wc
| -l" will return 1 or more than 1, if it doesn't have any of them it will be
| a 0.
| 
| What's the problem? When I can't log into a mysql database (mostly cause it
| is down) I got a "0", what I want is to discard these machines, so they're
| not included in /tmp/whatever.
| I tried doing: grep -v "ERROR" and doing a 2> /dev/null after the mysql -p
| -e "show grants etc.." but it doesn't work.


You're probably not getting to pay attention to the mysql exit status.
Perhaps something line this:

  : ${TMPDIR:=/tmp}
  cmd=`basename "$0"`
  tmpbase=$TMPDIR/$cmd.$$
  trap 'rm -f "$tmpbase".*' 0 1 3 15    # tidy up

  grants=$tmpbase.grants.txt
  while read host
  do
    mysql -h "$host" -ublah -pfhfhfhfhf -e "show grants..." >"$grants" \
    || { echo "skipping $host, maybe down" >&2
         continue
       }
    egrep ......... <"$grants" | wc -l ...
  done < file-of-hosts

Cheers,
-- 
Cameron Simpson <cs at zip.com.au> DoD#743
http://www.cskk.ezoshosting.com/cs/




More information about the users mailing list