Issue with condition "if then elif else fi"


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Issue with condition "if then elif else fi"
# 1  
Old 09-12-2018
Issue with condition "if then elif else fi"

Hi everybody,

I must get trought a shell script 3 arguments.
1st argument = $1 (can take values REP1..4)
2nd argument = $2 (can take values A..Z)
3rd arguement = $3 (also can take values A...Z)

I've written this code :

Code:
#!/bin/bash
if [ $1 = "REP1" ]
then
   liste=/data/folder1
   echo "LISTEREP1 :" $liste
elif  [ $1 = "REP2" ]
then
    liste=/data/folder2
    echo "LISTEREP2 :"$liste
fi
liste_rep=$liste/$2/$3
echo "DO LOOP FOR REP1 AND REP2 : :"$1 $liste_rep
for printlist in $list_rep
do
   echo "SHOULD LOOP_"$1":" $liste_rep
done

if [ $1 = "REP3" ]
then
   liste=/data2/folder3
   echo "LISTEREP3 :" $liste
elif  [ $1 = "REP4" ]
then
    liste=/data2/folder4
    echo "LISTEREP4 :"$liste
fi
liste_rep=$liste/$2/$3
echo "DO LOOP FOR REP3 AND REP4 :"$1 $liste_rep
for printlist in $list_rep
do
   echo "SHOULD_LOOP_"$1":" $liste_rep
done
exit

The results I get for each $1 value are :

Code:
Prompt $ ./test_decomp.sh REP1 a b
LISTEREP1 : /data/folder1
DO LOOP FOR REP1 AND REP2 :REP1 /data/folder1/a/b
DO LOOP FOR REP3 AND REP4 :REP1 /data/folder1/a/b

Prompt $ ./test_decomp.sh REP2 a b
LISTEREP2 :/data/folder2
DO LOOP FOR REP1 AND REP2 :REP2 /data/folder2/a/b
DO LOOP FOR REP3 AND REP4 :REP2 /data/folder2/a/b

Prompt $ ./test_decomp.sh REP3 a b
DO LOOP FOR REP1 AND REP2 :REP3 /a/b
LISTEREP3 : /data2/folder3
DO LOOP FOR REP3 AND REP4 :REP3 /data2/folder3/a/b

Prompt $ ./test_decomp.sh REP4 a b
DO LOOP FOR REP1 AND REP2 :REP4 /a/b
LISTEREP4 :/data2/folder4
DO LOOP FOR REP3 AND REP4 :REP4 /data2/folder4/a/b

It's a mess.

My need is :

Depending on condition $1 = REP1 or REP2 it should execute
first loop
and if $1 = REP3 and REP4 should execute second loop.

But this is not the case,
Can you help?
Thanks in advance
Moderator's Comments:
Mod Comment Please use CODE tags when displaying sample input, sample output, and code segments.
# 2  
Old 09-12-2018
You might want to exit the code after the first two options were completed. Or you could continue in the elif ... elif chain for all four options.
Even better would be to deploy the case ... esac construct that most shells offer.


Totally different approach would be to avoid if ... fi entirely, extract the last number (1, 2, 3 , or 4) from the respective option, and use it to control the further execution of the code.
# 3  
Old 09-12-2018
Which shell are you using? All the shells have slightly different syntaxes which means a solution for one may not work with another.

What system are you on? This may also make a difference to a solution for your problem.

Is this homework or coursework? There is a sub-forum for that.

Andrew
# 4  
Old 09-12-2018
I've set an exit after the 2 options were completed.
The result are below

Code:
$ ./test_decomp.sh REP1 a b
LISTEREP1 : /data/folder1
DO LOOP FOR REP1 AND REP2 :REP1 /data/folder1/a/b

$ ./test_decomp.sh REP2 a b
LISTEREP2 :/data/folder2
DO LOOP FOR REP1 AND REP2 :REP2 /data/folder2/a/b


$ ./test_decomp.sh REP3 a b
DO LOOP FOR REP1 AND REP2 :REP3 /a/b

$ ./test_decomp.sh REP4 a b
DO LOOP FOR REP1 AND REP2 :REP4 /a/b

Now when entering option 3 and 4 the result is not good.
I don't get this.
It should be simple ?!?

------ Post updated at 03:30 PM ------

Linux release Centos 6.4
Moderator's Comments:
Mod Comment Please use CODE tags when displaying sample input, sample output, and code segments.

Last edited by shellX; 09-12-2018 at 10:40 AM..
# 5  
Old 09-12-2018
Hi shellX,
Until you answer the question that Andrew asked in post #3 in this thread:
Quote:
Is this homework or coursework? There is a sub-forum for that.
we won't be able to offer much more help!

Have you tried any of the suggestions RudiC made in post #2? (We assume that you know that inserting an exit after the first two options were completed must be done if, and only if, one of the first two options was selected and that the first loop should only be executed if on of those first two options was selected!)
# 6  
Old 09-14-2018
First of all, an if-elif-else-fi that queries one variable (here: $1) can be more efficiently done by a case-;;-;;-esac.
Then, if the following code is similar enough for each condition, it is advisable to set variables that control the exact behavior in the following common code.
Example:
Code:
#!/bin/bash
# branch on $1, set distinct variables
case $1 in
("REP1")
    liste=/data/folder1
    text1="LISTEREP1"
    text2="REP1 AND REP2"
;;
("REP2")
    liste=/data/folder2
    text1="LISTEREP2"
    text2="REP1 AND REP2"
;;
("REP3")
    liste=/data2/folder3
    text1="LISTEREP3"
    text2="REP3 AND REP4"
;;
("REP4")
    liste=/data2/folder4
    text1="LISTEREP4"
    text2="REP3 AND REP4"
;;
(*)
    echo "unsupported argument '$1'"
    exit 1
;;
esac

# common code
echo "$text1 : $liste"
liste_rep=$liste/$2/$3
echo "DO LOOP FOR $text2 :${1}" $liste_rep
for printlist in $list_rep
do
   echo "SHOULD_LOOP_${1}:" $liste_rep
done

This User Gave Thanks to MadeInGermany For This Post:
# 7  
Old 09-25-2018
Thank You.
Much better indeed.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies

2. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

3. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

4. Solaris

The slices "usr", "opt", "tmp" disappeared!!! Help please.

The system don't boot. on the screen appears following: press enter to maintenance (or type CTRL-D to continue)...I checked with format command. ... the slices "0-root","1-swap","2-backup" exist. ...the slises "3-var","6-usr" -unassigned. :( (16 Replies)
Discussion started by: wolfgang
16 Replies

5. Shell Programming and Scripting

""Help Me!""Beginner awk learning issue

Hi All, I have just now started learning awk from the source - Awk - A Tutorial and Introduction - by Bruce Barnett and the bad part is that I am stuck on the very first example for running the awk script. The script is as - #!/bin/sh # Linux users have to change $8 to $9 awk ' BEGIN ... (6 Replies)
Discussion started by: csrohit
6 Replies

6. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

7. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

8. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question