Visit Our UNIX and Linux User Community


Help with loops?


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Help with loops?
# 1  
Old 10-19-2014
Question Help with loops?

I'm trying to understand better the while and until loops, can someone help me with this example?

Code:
#!/bin/bash
# Listing the planets.

for planet in Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto
do
  echo $planet  # Each planet on a separate line.
done

echo; echo

for planet in "Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto"
    # All planets on same line.
    # Entire 'list' enclosed in quotes creates a single variable.
    # Why? Whitespace incorporated into the variable.
do
  echo $planet
done

echo; echo "Whoops! Pluto is no longer a planet!"

exit 0

Can anyone show me how can this be done but with a while and an until loop?
# 2  
Old 10-19-2014
You can iterate over an array in a while loop. First we'll need an array though. sh only has 1 -- $@. Let's use that.

Code:
$ set -- Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto
$ while [ $# -gt 0 ]; do echo $1; shift; done
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
Pluto

You can do it without shifting as well. Here is another example using an array in bash.

Code:
$ declare -a planets=(Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto)
$ i=0; while (( i < ${#planets[@]} )); do echo "${planets[i]}"; ((i++)); done
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
Pluto

You can quote either list to see the difference.
# 3  
Old 10-19-2014
while loops while is true or until is false, until loops while is false or until is true.

Code:
#!/bin/bash

campaign="on"

while [ "$campaign" == "on" ]; do
	politician="liar"	
	echo "I am a $politician"
	campaign="off"
done

until [ "$campaign" == "on" ]; do
	politician="sucker"
	echo "I am a $politician"
	campaign="on"
done

This User Gave Thanks to Aia For This Post:
# 4  
Old 10-20-2014
Some more examples, hope they help Smilie

Code:
# for loop with a case statement
for planet in Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto;do
	case $planet in
	Earth)	echo "You live here on $planet"
		;;
	Pluto)	echo "$planet is no longer a planet"
		;;
	*)	echo "$planet"
		;;
	esac
done

# while loop with a counter
C=0
MAX=100
printf '\n\n\t%s\n\n' "Current numbers:"
while [[ $C -le $MAX ]];do
	printf '%s' "$C "
	c=$[ $C % 2 ]
	[[ 0 -eq $c ]] && echo "... is an equal number"
	((C++))
done

Since you pass all arguments as a single quote (all planets/words are within the same quotes), it is handled as a single string.
Therefor, there is only 1 entry, holding all the words.

However, passing an array is diffrently, there you should use: "${@}"
Here, the quotes will embrace each single element of the array, eg: a filename with whitespace in its name will remain 'valid'.

Hope this helps

Previous Thread | Next Thread
Test Your Knowledge in Computers #196
Difficulty: Easy
Javascript ranked significantly higher than Python according to the TIOBE Index for October 2019.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Need help with for loops

Why wont my for statements work? Im trying to get this script to swich to a user an if you put in a start/stop/or restart paramater to do just that for each user. I commented out the actual start/stop actions to test it just by using echos and not do anything hasty in the environment but it... (0 Replies)
Discussion started by: LilyClaro
0 Replies

2. UNIX for Dummies Questions & Answers

loops with tr

Hello, I'm not sure if this is more appropriate for the 'unix for dummies' or the 'unix for experts' forum because I'm new to this forum and this is the second topic I've discussed, but if you could let me know which one was more appropriate for something like this, please do! So in tr (an... (2 Replies)
Discussion started by: juliette salexa
2 Replies

3. Shell Programming and Scripting

Loops

Hi All, I want to execute a script the number of times a user enters. Please can you advise on hor can I do the same. Many Thanks, Shazin (4 Replies)
Discussion started by: Shazin
4 Replies

4. Shell Programming and Scripting

Help with the 2 for loops

#!/bin/bash IFS=$'\n' A= a c b t g j i e d B= t y u i o p counter=0 found="" for i in $(cat $A) do for j in $(cat $B) do if then found="yes" fi done if then (1 Reply)
Discussion started by: vadharah
1 Replies

5. UNIX for Dummies Questions & Answers

Help with While Loops

I am traversing down a list, and I am not quite sure how to tell the loop to break when it's done going through the file. #!/bin/sh while : do read list <&3 echo $list done is the code. The file "list" is simply 5 4 3 2 1 any advice on how to break the loop after the file is... (1 Reply)
Discussion started by: MaestroRage
1 Replies

6. Shell Programming and Scripting

while loops

Hi I've a file like so: Now, I want to read my file and take ex. the Media ID and the Type for each groups of Media (Media1,Media2,...,Media(n): cat /tmp/file|\ while read FILE do while $(FILE|cut -d: -f1)=Media$i do #here will be some test, ex: #if Media ID < 23 ... (4 Replies)
Discussion started by: nymus7
4 Replies

7. UNIX for Dummies Questions & Answers

two loops

Hi, how can I use "for" to have two loops : this is my script : for i in (A B C) do for j in (a b c) do echo $i$j done done #End I want to print out Aa Ab Ac .... But I have error message : syntax error at line 1 : `(' unexpected Many thanks before. How should I use "for" ?? (2 Replies)
Discussion started by: big123456
2 Replies

8. UNIX for Dummies Questions & Answers

While Loops

I'm trying to create a loop that will prompt the user for 15 values, not forcing them to enter all 15. If the user enters through one or more of the prompts the null value needs to be converted to 0, otherwise set the parameter = to the value entered: ex. Please enter file no #1: 17920 ... (4 Replies)
Discussion started by: vdc
4 Replies

9. Shell Programming and Scripting

Loops within loops

I am running on HPUX using ksh. I have a script that uses a loop within a loop, for some reason the script seems to hang on a particuliar record. The record is fine and hits the condition in Blue. If I kill the 1st loop process the script continues on with no problem. Begin code> <Some... (8 Replies)
Discussion started by: bthomas
8 Replies

10. UNIX for Dummies Questions & Answers

loops?

hello....very new user to unix...and i have a question..i am not sure if there is such a thing For example...the user is asked if he likes Bananas....if he says yes.... echo You like Bananas $name at the end of the script it echos all that the user has entered so they can read it.... but... (1 Reply)
Discussion started by: jonas27
1 Replies

Featured Tech Videos