Shell advanced syntax?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Shell advanced syntax?
# 1  
Old 10-18-2010
Shell advanced syntax?

I am not an expert of shell scripting, but I can do some simple things. Now, I read a script written by others and I need some help from the experts of this forum.

Please help me to understand what is going on in this cycle:
Code:
if [ $COMPILER = "sun" ]; then
[[ -f /sunstudio12/bin/sunf90 ]] && \
      export IMDI_COMPILER=/sunstudio12/bin/sunf90 || \
      { 
      echo "Please specify location!"; exit; 
      }
    [[ -z "$SZIP_ROOT" ]] && SZIP_ROOT=/szip-2.1
elif [ $COMPILER = "intel" ]; then
....

In particular, I do not understand this synax: [[...]] && \ export... ||,
where the || operand is used after the export command. It rise by me the question if the export command return any Boolean value?

Thank you in advance for help!
# 2  
Old 10-18-2010
Code:
[[...]] && export... ||,

is one line form of

Code:
if [[ ... ]] ; then
export...
else
echo "Please ...
fi

the \ is used for cosmetic reasons : when a line is too long, you can break it by typing <enter> but in order to "desactivate" the <enter> you have to protect it first by a \

so the line
Code:
[[...]] && export... || cmd...

can be put one several line to make it readable when commands are too long:
Code:
[[...]] && \
export... || \
cmd...


Last edited by ctsgnb; 10-18-2010 at 12:03 PM..
These 2 Users Gave Thanks to ctsgnb For This Post:
# 3  
Old 10-18-2010
still unclear

Thank you very much for good answer!

But I would like to point out two things that are still unclear to me:

1. Actually, I have two ifs or not? I mean when typing
Code:
if [[...]]; then
   [[....]]
elif....

2. Mainly, what is a bit strange for me, is the following:
Code:
if [[.....]] ; then
   [[ -f ... ]] && \
      export  ... || \
      { 
      echo ...; exit; 
      }

because I am expecting no return from export command. So, why should I ask like this:
Code:
 [[...]] AND export VAR OR...

# 4  
Old 10-18-2010
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

This User Gave Thanks to Scrutinizer For This Post:
# 5  
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


I agree with the dude Scrutinizer Smilie
This User Gave Thanks to ctsgnb For This Post:
# 6  
Old 10-18-2010
[[ xxx ]] is test [ xxx ], see man test or test in man ksh.

I call this "procedure as logic". Run the expresions and commands connected by && in order and keep going as long as commnads return true). You see this in PERL and C/C++ occasionally. Every command returns a logical value, the state of $?, 0 = true. I prefer, for each step, "if ( !next_command );then print error on next command and exit". It keeps the indentedness under control, separates the steps and reads easily. I call it "Cut them off at the pass!" (prevent complexity by doing simple, important things first, and when they are out of the way, the rest is simpler).
This User Gave Thanks to DGPickett For This Post:
# 7  
Old 10-18-2010
Quote:
[[ xxx ]] is test [ xxx ], see man test or test in man ksh.
Sorry, but this is absolute tosh. A Conditional Expression is not the same as a "test" and they have their own syntax and rules. Admittedly there is some small overlap in the syntax for certain conditions (such as "-f").
This User Gave Thanks to methyl 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