ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Introduction to Linux - A Hands on Guide
This guide was created as an overview of the Linux Operating System, geared toward new users as an exploration tour and getting started guide, with exercises at the end of each chapter.
For more advanced trainees it can be a desktop reference, and a collection of the base knowledge needed to proceed with system and network administration. This book contains many real life examples derived from the author's experience as a Linux system and network administrator, trainer and consultant. They hope these examples will help you to get a better understanding of the Linux system and that you feel encouraged to try out things on your own.
Click Here to receive this Complete Guide absolutely free.
As konsolebox already pointed out, the case/esac construct does not work that way in bash. If you're not stuck with case, you can try a different approach like this
Code:
#!/bin/bash
pattern=1
limit=4
while [ $pattern -le $limit ]
do
printf "$pattern"
pattern=$((pattern + 1))
done
echo
Anyway, what are you trying to achieve? Will pattern be always numeric?
Edit: the same result can be achieved in recent bash with a single piped statement, as
Code:
echo {1..4} | sed 's/ //g'
but again it depends on what you're trying to achieve.
1) echo " statements for pattern 1 match will be executed \n "
;;
2) echo " statements for patter 2 match will be executed \n"
;;
3) echo " statement for patter 3 match will be executed "
;;
esac;
now how do I make this script print
Statement for pattern 1 match will be executed
Statement for pattern 2 match will be executed
when the patther=1
i.e when I give patter=1 then two cases should be executed 1 and 2 Like in C language switch() case statements.
You dont give a break; statements the statements gets executed for the perticular case untill a break is found.
if I give
switch(var1)
{
case 1: printf(" Statement for pattern 1 match will be executed") ;
case 2: printf ("Statement for pattern 2 match will be executed ") ;
break;
case 3: printf ("Statement for pattern 3 match will be executed ") ;
break ;
}
I achive what I want from the above C snippet. I want to achive the same in shell script.
What I am seeing here is you wanting the BASH "case" construct to work the same as the C "switch"---and several people telling you that it is different. Have you looked this up in the Advanced Bash Scripting Guide (ABS)? ...free at http://tldp.org
The case statement is inside a while loop which will be executed until the pattern is equal to a keyword (BREAK). At each matching condition the pattern is updated to the next one. In this way the test is repeated and the result is exactly what you're trying to get. Note that you can insert BREAK at any point in the case construct.
In place of ;; we can use ;& (unconditional follow up) and ;;& (conditional follow up). So, the following will print 12, if the pattern is 1 and will print 2, if the pattern is 2.
case $pattern in
1)
echo "1"
;&
2)
echo "2"
;;
esac
Though this is an old thread, the answer may help others. Credit goes to my boss who found it for me from bash man page.
Another point to note. I think it is a new feature in the newer versions of bash. I'm sure this would not have been existing back in 2008. Though I dont have when this feature got into bash but I can say that bash-3.0 dint have it.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.