One way to test for (non-)empty string is to use test and -z (-n)
$ x=foo $ test -z "$x" $ echo $? 1
This is mostly seen with an if and [ -z … ] syntax
$ y=bar $ if [ -n "$y" ]; then echo non-empty; fi non-empty
Instead of a variable, it could be the output of a script.
if [ -n "$(grep ORA- alertDB01.log)" ] then echo there is an error in the alert log else echo "fine :)" fi
This will work for years until one day you get :
ksh: no space
Why that? This is the way the shell works. Your shell (here ksh on AIX) starts having errors as soon as your subshell (here the grep) is exhausting the space.
$ wc -l alertDB01.log 2 alertDB01.log $ if [ -n "$(grep ORA- alertDB01.log)" ]; then echo non-empty; else echo "fine :)"; fi non-empty $ wc -l alertDB01.log 75025 alertDB01.log $ if [ -n "$(grep ORA- alertDB01.log)" ]; then echo non-empty; else echo "fine :)"; fi ksh: no space
You got a memory error, how the shell will react is random (core dump, errors, continue, crashes). It will just bug and you do not want this.
There is more than one to circumvent this. For instance you could use the return code of grep
$ if grep ORA- alertDB01.log >/dev/null; then echo non-empty; else echo "fine :)"; fi non-empty
Different shells (Bash / Bourne) and different OSs (Linux / AIX / HPUX) may react differently. If AIX crashed with a 50’000 lines, it may scale up to millions of lines in recent Linux’s – but still use trucks of memory