Shell advanced syntax?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Shell advanced syntax?
# 8  
Old 10-18-2010
Quote:
Originally Posted by Scrutinizer
I think it is equivalent to this:
Code:
if [ $COMPILER = "sun" ]; then
  if [[ -f /sunstudio12/bin/sunf90 ]]; then
    export IMDI_COMPILER=/sunstudio12/bin/sunf90
  else
    echo "Please specify location!"
    exit
  fi
  if [[ -z "$SZIP_ROOT" ]]; then
    SZIP_ROOT=/szip-2.1
  fi
elif [ $COMPILER = "intel" ]; then

Quote:
Originally Posted by ctsgnb
I agree with the dude Scrutinizer Smilie
That's close but not quite correct. The original version's echo executes if the export command fails. This interpretation's does not.

Regards,
Alister
This User Gave Thanks to alister For This Post:
# 9  
Old 10-18-2010
Now I agree with Dude Alister ... LoL
This User Gave Thanks to ctsgnb For This Post:
# 10  
Old 10-18-2010
A few alternatives:

Code:
if [[ -f /sunstudio12/bin/sunf90 ]]; then
    export IMDI_COMPILER=/sunstudio12/bin/sunf90
if [ $? -ne 0 ]; then
    echo "Please specify location!"
    exit
fi

...or...

Code:
if ! { [[ -f /sunstudio12/bin/sunf90 ]] && export IMDI_COMPILER=/sunstudio12/bin/sunf90; }; then
    echo "Please specify location!"
    exit
fi

...or...

Code:
if ! [[ -f /sunstudio12/bin/sunf90 ]] || ! export IMDI_COMPILER=/sunstudio12/bin/sunf90; then
    echo "Please specify location!"
    exit
fi

Regards,
Alister
These 3 Users Gave Thanks to alister For This Post:
# 11  
Old 10-18-2010
And which one is the best then ? (less parsing & less resource consumming) ?
This User Gave Thanks to ctsgnb For This Post:
# 12  
Old 10-18-2010
Quote:
Originally Posted by alt
because I am expecting no return from export command.
Every single command run on a UNIX/Linux/POSIX system will return an exit status. If that exit status is 0, the shell treats that as a boolean true. Any other exit status is treated as a boolean false.

Regards,
Alister

---------- Post updated at 02:21 PM ---------- Previous update was at 02:14 PM ----------

Quote:
Originally Posted by alister
That's close but not quite correct. The original version's echo executes if the export command fails. This interpretation's does not.

Regards,
Alister

Actually, export always returns a 0 exit status, so it will never fail. Scrutinizer's code should work just as the original.

That said, I'll leave my post as is since that's a very unusual corner case. In just about every other situation, a command can return a non-zero exit status and the constructs would not be logically equivalent.

Regards,
Alister
This User Gave Thanks to alister For This Post:
# 13  
Old 10-18-2010
Quote:
Originally Posted by alister
Every single command run on a UNIX/Linux/POSIX system will return an exit status. If that exit status is 0, the shell treats that as a boolean true. Any other exit status is treated as a boolean false.

Regards,
Alister
I certainly wouldn't challenge your assertion of that. But I would challenge any assertion that said return codes are always meaningful:

Code:
/root # yum install jiggery-pokery
Loaded plugins: fastestmirror, priorities
Determining fastest mirrors
 * addons: mirror.atrpms.net
 * base: mirror.switch.ch
 * extras: mirror.atrpms.net
 * updates: ftp.halifax.rwth-aachen.de
addons                                                   |  951 B     00:00     
addons/primary                                           |  202 B     00:00     
base                                                     | 2.1 kB     00:00     
base/primary_db                                          | 1.6 MB     00:01     
extras                                                   | 2.1 kB     00:00     
extras/primary_db                                        | 188 kB     00:00     
updates                                                  | 1.9 kB     00:00     
updates/primary_db                                       | 670 kB     00:00     
Setting up Install Process
No package jiggery-pokery available.
Nothing to do
/root # echo $?
0

Or perhaps alt's confusion is based on the interpretation of
Code:
if [[.....]] ; then
   [[ -f ... ]] && \
      export  ... || \
      { 
      echo ...; exit; 
      }

where the || relates not to the failure of the export command, but more to that of the test which precedes it?
This User Gave Thanks to Scott For This Post:
# 14  
Old 10-18-2010
Your quite right Alister, however I suspect my interpretation is what the author of the script intended to write. Otherwise there is no logic to the error message and the exit statement. This illustrates how easily these logical ANDs and ORs get misinterpreted. That is precisely why I dislike them especially when there is a x && y || z concoction..

--edit--
Actually I think I was correct after all:
If the test fails then the statement after the && does not get executed since the left side is false. And then the part after the || gets excecuted since its left side was false and also the export will never fail, so that will not trigger the right side of the or.

OK, only now I read your added remark to your post. Probably all of us are right then Smilie

Last edited by Scrutinizer; 10-18-2010 at 03:42 PM..
This User Gave Thanks to Scrutinizer For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Syntax error C shell

Hello, I have a newbe syntax error but I cant find it syntax error: unexpected end of file #!/bin/csh # pe request #$ -pe mpi_16 32 #### 16 core : 'mpi_16 16' || 24 core : 'mpi_24 24 ' # our Job name #$ -N test2MD #$ -S /bin/sh (1 Reply)
Discussion started by: dulceC
1 Replies

2. UNIX for Beginners Questions & Answers

Need help to convert syntax to shell

Hi Folks - I need help converting a piece of code from batch to bash. Here is the code: FOR /f "eol=; tokens=1,2,3,4 delims=, " %%i in (Update_Subvars.txt) do ( ECHO alter database %%i.%%j set variable %%k %%l; ) What it's doing is retrieving the values from this file: ... (2 Replies)
Discussion started by: SIMMS7400
2 Replies

3. Homework & Coursework Questions

Trouble with Advanced Shell Programming

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: I am working on a hands on project. We are creating a script for a corporate phone list. The project I am... (2 Replies)
Discussion started by: SarahBelle7858
2 Replies

4. Shell Programming and Scripting

Advanced error handling in shell scripts

Hi all I've got a question regarding error handling in shell scripts. My background is mainly object oriented programming languages, but for a year or so I've been doing more and more (bash) shell scripting (which I quite enjoy by the way). To handle errors in my scripts I... (3 Replies)
Discussion started by: script_man
3 Replies

5. UNIX for Dummies Questions & Answers

| help | unix | grep (GNU grep) 2.5.1 | advanced regex syntax

Hello, I'm working on unix with grep (GNU grep) 2.5.1. I'm going through some of the newer regex syntax using Regular Expression Reference - Advanced Syntax a guide. ls -aLl /bin | grep "\(x\)" Which works, just highlights 'x' where ever, when ever. I'm trying to to get (?:) to work but... (4 Replies)
Discussion started by: MykC
4 Replies

6. Shell Programming and Scripting

shell variables advanced

Hi all, i have more questions but its all about variables so lets begin 1st, is possible to list all variables ? Command env display only shell variables, but what if i declared another variable? Command set display more variables but not defined by me. 2nd, what difference is between set... (24 Replies)
Discussion started by: wakatana
24 Replies

7. Post Here to Contact Site Administrators and Moderators

Where can I download the VTC - Unix Shell Scripting Advanced complete video

Where can I download the VTC - Unix Shell Scripting Advanced complete video. I don't know in which thread I should post this question.Plz help me out, or just tell me the link in the reply to this post. Thanks in advance. (0 Replies)
Discussion started by: villain41
0 Replies

8. Shell Programming and Scripting

syntax of c shell

i have this program in bash shell: #!/bin/bash array=(20 20 20 20 20) i=0 j=0 awk '/%/ {print $3}' try.txt| while (read s) arr=$s i=`expr $i + 1` echo "$i" end how can i convert this into c shell? (1 Reply)
Discussion started by: npatwardhan
1 Replies

9. Shell Programming and Scripting

Shell syntax

I'm having simple question here, and what's the different here? What is the "x" for? Thanks! (5 Replies)
Discussion started by: redstone
5 Replies

10. UNIX for Dummies Questions & Answers

Help with a shell syntax

I have a variable named "xyz" Now what will the below snippet mean: if ( ${?xyz} ) then .... endif What does ? signify here. Thanks (12 Replies)
Discussion started by: vibhor_agarwali
12 Replies
Login or Register to Ask a Question