Question about the difference between "for" and "while" loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Question about the difference between "for" and "while" loop
# 1  
Old 03-20-2012
Question about the difference between "for" and "while" loop

dear all,

i got some questions about for/while loop when working on redirect command output to for/while loop.

take one for example :

in for loop :
Code:
allfiles=`find /var/log -maxdepth 1 -type f -mtime +5`
index=1
for ((i=0; i<${#allfiles[@]}; i++)); do
    echo "$index:${allfiles[$i]}"
    index=`expr $index + 1`
done

this will have the output something below, only the first one will have the $index variable:
Code:
# ./my_script.sh
1: /var/log/mcelog
/var/log/maillog.2
/var/log/spooler.2
/var/log/rpmpkgs.2
/var/log/boot.log.2
/var/log/anaconda.syslog

however, if i change to use "while" loop, then it's different:

Code:
index=1
find /var/log -maxdepth 1 -type f -mtime +5 |
while read line; do
      echo "$index: $line"
      index=`expr $index + 1`
done

the command output will look like below, every line will have
the $index variable in the beginning:
Code:
# ./my_script.sh
1: /var/log/mcelog
2: /var/log/maillog.2
3: /var/log/spooler.2
4: /var/log/rpmpkgs.2
5: /var/log/boot.log.2
6: /var/log/anaconda.syslog

Can anyone advise why the result from "for" and "while" isn't same??

Thanks.

Moderator's Comments:
Mod Comment Use code tags, see PM, thanks.

Last edited by zaxxon; 03-20-2012 at 06:36 AM.. Reason: code tags
# 2  
Old 03-20-2012
Is it at all possible that allfiles is a multi-line string rather than an array of single line strings in your for loop?

Try the following:
Code:
allfiles=(`find /var/log -maxdepth 1 -type f -mtime +5`)


Last edited by Skrynesaver; 03-20-2012 at 07:53 AM.. Reason: added code change to get an array
# 3  
Old 03-20-2012
In the for loop you are not putting the files into an array, but rather into a string, therefore the loop is executed only once for "${allfiles[0]}", which contains the entire list of files.

Use this instead:
Code:
allfiles=( $(find /var/log -maxdepth 1 -type f -mtime +5) )

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. 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

5. 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

6. Solaris

difference between "root" and "usr" packages

Hi, could someone pls enlighten me on the difference between the "root" package and "usr" package? Like in this example: pkginfo -l SUNWGtku | grep -i desc DESC: GTK - The GIMP Toolkit (Usr) and pkginfo -l SUNWGtkr | grep -i desc DESC: GTK - The GIMP Toolkit (Root)... (6 Replies)
Discussion started by: masloff
6 Replies

7. UNIX for Advanced & Expert Users

A question/problem about oracle "tns listener" and "enterprise manager"

hi, I have a problem about the Oracle related components. I'm not able to find any answer yet, and waiting for your responses... Here is the configuration of my system: * an IBM P550 machine, * an AIX 5.3 running on it and * an oracle database, already installed on it. The problem (or... (1 Reply)
Discussion started by: talipk
1 Replies

8. UNIX and Linux Applications

A question/problem about oracle "tns listener" and "enterprise manager"

hi, I have * an IBM P550 machine, * an AIX 5.3 running on it and * an oracle database, already installed on it. The problem (or question of my own) is: Oracle tns listener, "CT_LISTENER", and the enterprise manager (EM) of the instance, which is uniq instance and called... (0 Replies)
Discussion started by: talipk
0 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