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:
Please use CODE tags when displaying sample input, sample output, and code segments.
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.
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:
Please use CODE tags when displaying sample input, sample output, and code segments.
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!)
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:
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)
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)
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)
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)
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)
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)
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)
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)