[CentOS] shell script strangeness...

Fri May 16 07:33:07 UTC 2008
Ian Blackwell <ian at ikel.id.au>

Craig White wrote:
> That works fine one CentOS 5 (double quotes and backtics) but not on
> CentOS 4.6
>
> Thanks...I guess it's good enough for now.
>
> Craig
>
> _______________________________________________
> CentOS mailing list
> CentOS at centos.org
> http://lists.centos.org/mailman/listinfo/centos
>
>   
I can only imagine it is "working" in 4.6 because the result of "grep 
entry_chooser.js /var/log/httpd/access_log" is either empty or 1 
"word".  The test syntax [ -z xxx ] would report the "too many 
arguments" error whenever the grep returned more than one word.  You can 
test this at your command line by typing in:-
    [ -z one ]
and
    [ -z one two three four five ]

The first will return "false" but you'll just see another bash prompt, 
the second will report the "too many arguments" error.  This is 
certainly the case for me using RHEL4.6, so I would imagine CentOS4.6 
should be the same.  You can also see it explained by these commands and 
results:-
[irb at zaphod ~]$ [ -z ]
[irb at zaphod ~]$ echo $?
0
[irb at zaphod ~]$ [ -z one ]
[irb at zaphod ~]$ echo $?
1
[irb at zaphod ~]$[ -z one two three four ]
-bash: [: too many arguments
[irb at zaphod ~]$ echo $?
2
[irb at zaphod ~]$

I hope this helps you understand why it is "working" on one machine but 
not another.

Ian

PS: I always prefer $(cmd) to backtics for readability.  e.g.

if [ -z "$(grep entry_chooser.js /var/log/httpd/access_log)" ]

PPS: grep -q works for me on RHEL4.6 and CentOS5.1