If then else help in shell script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting If then else help in shell script
# 15  
Old 04-01-2010
Quote:
Originally Posted by methyl
Pps. There is a continued theme in alister's posts where the in-line execution sloping quotes `` are unmatched. The second "`" is consistently missing.
Hope this helps.
#
The second backtick is there in every instance (just after -f7). Perhaps you're looking ahead at the final argument within [.

Regards,
Alister
# 16  
Old 04-01-2010
My sincere apologies alister. The sloping quotes are indeed matched.

Until we know what O/S and Shell we have this is going to be guesswork.
As it doesn't like "==" we are probably on a mainstream unix.

I have concerns about an unquoted "?" in any Shell.

I'd prefer "ps -fuibiaud" to "ps -ef" piped to "grep ibiaud".


Unless you have a system which will not shut down, or a totally rogue process arising from bad code, there is NEVER a reason to issue "kill -9" to a commercial application. There is often reason to issue "kill -15".
# 17  
Old 04-01-2010
Code:
ls -lad killscrp.sh shows:
-rwxrwxrwx   1 brsas2   other        148 Apr  1 15:49 killscrp.sh

Code:
cat killscrp.sh shows:
# set -x
if [ "$(ps -ef  | grep  "ibiaud" | grep -v grep | tr -s " " | cut -d " " -f7)" =  "?" ]; then
        echo "not running"
else
        echo "running"
fi

Code:
uname -a shows:
SunOS xyxprod 5.9 Generic_118558-06 sun4u sparc SUNW,Sun-Fire-V440

Code:
echo $SHELL shows:
/bin/sh

Code:
# ./killscrip.sh shows:
./killscrp.sh: test: unknown operator  | cut -d

# 18  
Old 04-01-2010
@shanonadams68
I think we hit the solution earlier, except for the "==". Did you try the following?
Code:
if [ "`ps -ef  | grep  'ibiaud' | grep -v grep | tr -s ' ' | cut -d ' ' -f7`" = "?" ]; then

or
Code:
if [ "`ps -ef  | grep  \"ibiaud\" | grep -v grep | tr -s \" \" | cut -d \" \" -f7`" =  "?" ]; then


@methyl
It happens. No worries Smilie
This old shell appears to not support the $() syntax, and seems to process double quotes within a double-quoted backtick command substitution before executing it (like ksh). If I'm mistaken and these suggestions don't work, hopefully you can knock it out of the park.

Regards,
Alister
# 19  
Old 04-02-2010
I don't think this is the source of the problem, but there is something i noticed:

Code:
cut -d " " -f7

as far as the documentation on my system (AIX 5.3) goes the delimiter is expected immediately after the "-d", not separated from that by a blank. The command should IMHO read:

Code:
cut -d' ' -f7

regardless of using double or single quotes, which shouldn't make no difference here.

I hope this helps.

bakunin
# 20  
Old 04-02-2010
Nah. It has nothing to do with cut's option processing. If that were the case, there would be an error message from cut containing "cut: ".

I can replicate the issue on ksh, since it exhibits the same behavior when using obsolete backtick command substitution within a double-quoted string (it doesn't behave that way with the non-obsolete $() syntax, or if the command substitution is not double-qutoed).

The issue is that that this shell processes double quoted strings before invoking the command substitution, so a double-quote within the command substition must be escaped, otherwise it terminates the double-quoted string. Surprisingly (at least, to me), is that the end of a token terminates an open backtick command substitution that began within a double-quoted string. A matching backtick later on in the command line is not looked for; instead, when found, it will trigger another instance of command substitution.

When parsing the following command ...
Code:
[ "`ps -ef  | grep  "ibiaud" | grep -v grep | tr -s " " | cut -d " " -f7`" =  "?" ]

... the shell generates 5 tokens in parsing ['s arguments:
Code:
1: "`ps -ef  | grep  ibiaud | grep -v grep | tr -s "
2: " | cut -d "
3: " -f7`"
4: "="
5: "?"

1: Even though this token does not contain a closing backquote, its end delimits the command substitution; tr is the final command in the pipeline (note that cut is not part of it).

2: This token is the second argument to [ and generates the "./killscrp.sh: test: unknown operator | cut -d " error message, because obviously [ doesn't know what to do with it.

3: A short string which ends in what was intended to be the matching backtick to the backtick in token 1. This backtick begins another command substitution which is immediately terminated since it occurs at the end of the token, and it began within double-quotes. This attempt to execute a null command line is the source of the "./killscrp.sh: : execute permission denied" error message.

4 and 5: Two more strings passed as arguments to [

Here's a trace (only change I made was dropping the ps options which are incorrect on test system):
Code:
$ ksh --version
  version         sh (AT&T Labs Research) 1993-12-28 p
$ set -x
$ [ "`ps  | grep  "ibiaud" | grep -v grep | tr -s " " | cut -d " " -f7`" =  "?" ]
+ ps
+ grep ibiaud
+ tr -s ''
+ grep -v grep
+ ''
ksh: : cannot execute [Is a directory]
+ [ '' ' | cut -d ' ' -f7' = '?' ]
ksh: [:  | cut -d : unknown operator

I learned a bit about how `` command substitution within a double-quoted string works, and, I must say, I'm very grateful to have $() available on every shell that I use Smilie.

Cheers,
Alister

Last edited by alister; 04-02-2010 at 05:45 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Shell script newbie- how to generate service log from shell script

Hi, I am totally a newbie to any programming languages and I just started an entry level job in an IT company. One of my recent tasks is to create a script that is able to show the log file of linux service (i.e. ntpd service) lets say, if I run my script ./test.sh, the output should be... (3 Replies)
Discussion started by: xiaogeji
3 Replies

2. Shell Programming and Scripting

Pass C shell array to another C shell script(csh) and shell(sh)

Dear Friends, Please help me on this my script name is send.csh In this i have written the statement like this set args = ( city state country price ) I want to pass this array to another c shell called receiver.csh. and i want to use it in this c shell or how to pass to... (2 Replies)
Discussion started by: SA_Palani
2 Replies

3. Shell Programming and Scripting

How to write config shell script to pass variables in master shell script?

Dear Unix gurus, We have a config shell script file which has 30 variables which needs to be passed to master unix shell script that invokes oracle database sessions. So those 30 variables need to go through the database sessions (They are inputs) via a shell script. one of the variable name... (1 Reply)
Discussion started by: dba1981
1 Replies

4. UNIX for Dummies Questions & Answers

How to write Config shell script to pass variables in master shell script?

Dear Unix gurus, We have a config shell script file which has 30 variables which needs to be passed to master unix shell script that invokes oracle database sessions. So those 30 variables need to go through the database sessions (They are inputs) via a shell script. one of the variable name... (1 Reply)
Discussion started by: dba1981
1 Replies

5. Shell Programming and Scripting

Unable to pass shell script variable to awk command in same shell script

I have a shell script (.sh) and I want to pass a parameter value to the awk command but I am getting exception, please assist. diff=$1$2.diff id=$2 new=new_$diff echo "My id is $1" echo "I want to sync for user account $id" ##awk command I am using is as below cat $diff | awk... (2 Replies)
Discussion started by: Ashunayak
2 Replies

6. Shell Programming and Scripting

Correct shell script to Call One shell script from another shell script

Hi All, I have new for shell scripting. Problem : I have one scrip at serv1 and path of server is /apps/dev/provimage/scripts and script name:extract_ancillary.bat. I need to call this script at server2(my working server) and execute at server2 . Please let me know how to build the... (5 Replies)
Discussion started by: Vineeta Nigam
5 Replies

7. Shell Programming and Scripting

call another shell script and pass parameters to that shell script

Hi, I basically have 2 shell scripts. One is a shell script will get the variable value from the user. The variable is nothing but the IP of the remote system. Another shell script is a script that does the job of connecting to the remote system using ssh. This uses a expect utility in turn. ... (2 Replies)
Discussion started by: sunrexstar
2 Replies

8. Shell Programming and Scripting

How to use ssh execute other shell script on other host (shell script include nohup)?

i want use ssh on the host01 to execute autoexec.sh on the host02 like following : host01> ssh host02 autoexec.sh autoexec.sh include nohup command like follwing : nohup /home/jack/deletedata.sh & after i execute ssh host02 autoexec.sh one the host01. i can't found deletedata.sh... (1 Reply)
Discussion started by: orablue
1 Replies

9. Shell Programming and Scripting

invoking a shell script inside cgi shell script

Hi, I have an HTML form through which I get some text as input. i need to run a shell script say script.sh inside a perl-cgi script named main_cgi.sh on the form input. I want to write the contents of the form in a file and then perform some command line operations like grep, cat on the text... (2 Replies)
Discussion started by: smriti_shridhar
2 Replies

10. Shell Programming and Scripting

How to Run a shell script from Perl script in Parent shell?

Hi Perl/UNIX experts, I have a problem in running a shell script from my perl script (auto.pl). I run the perl script using perl auto.pl from the shell prompt The shell script picks the files in "input" folder and procesess it. The shell script blue.sh has this code. export... (16 Replies)
Discussion started by: hifake
16 Replies
Login or Register to Ask a Question