Sponsored Content
Top Forums Shell Programming and Scripting Is it possible to have a for loop inside another for loop? Post 302394472 by DoxieLvr on Thursday 11th of February 2010 12:28:32 PM
Old 02-11-2010
Quote:
Originally Posted by scottzx7rr
Is it possible to have a for loop nested inside another for loop? I am trying to run a script against specific files inside a child directory but I can't seem to find a solution that is clean and affect to do it. Here is what I am trying do. I have 2 gzip files in each of the Target Directories that I need to run a script against. Then after the report is generated by the script I need to move the report from the Output Target back into the Target Directory. I been looking for way to do the inbedding of the for in another for but I don't really seem to find a way that works. Any help would be appreciated. Thx in Advance.

Starting directory=/mnt
Target Directories=/mnt/TASK-WF001 through 200
Output file Directory=/export/home/files/output_files/


Code:
#!/bin/sh
#### Function to automate the running of the audit scripts ####
for x in 1 2 3 4 5 6 7 8 9
do
#### Changing directory to child directory where the files are located ####
cd TASK-WF*$x
for f in `ls *gz`
   do
        echo $f
       /scripts/extract $f
       mv /export/home/files/output_files/* .
   done
done

I see one problem. You're changing directory to the target directory at the start of the outer loop but not returning back up afterward so the next time through the loop, you try to go down one more directory level and fail.

Three possible solutions:
1) Add "cd .." before the outer "done".
2) More fool proof as it doesn't depend on all of the directories being on the same level: change the "cd" command to "pushd" and add a "popd" before the outer "done".
3) Less efficient but, IMHO, cleanest: run the contents of the outer loop in a subshell so the working directory is automatically reset:
Code:
#!/bin/sh
#### Function to automate the running of the audit scripts ####
for x in 1 2 3 4 5 6 7 8 9
do
(
#### Changing directory to child directory where the files are located ####
cd TASK-WF*$x
for f in `ls *gz`
   do
        echo $f
       /scripts/extract $f
       mv /export/home/files/output_files/* .
   done
)
done

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

while loop inside while loop

Dear All, i have a awk script where i'm using while loop inside while loop here is the code: awk -v DATE="$CURRDATE" -v -F'@' 'BEGIN { while(( getline < "Merge_Calldet.txt" )) { ARR=$5 LINE=$0 while(( getline < "Merge_Accessnum.txt" )) { TESTSIMENTRY=$1 FILEDATE=$15 ... (0 Replies)
Discussion started by: panknil
0 Replies

2. Shell Programming and Scripting

Using variables created sequentially in a loop while still inside of the loop [bash]

I'm trying to understand if it's possible to create a set of variables that are numbered based on another variable (using eval) in a loop, and then call on it before the loop ends. As an example I've written a script called question (The fist command is to show what is the contents of the... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

3. UNIX for Dummies Questions & Answers

SED inside while loop

Hi, im having problem creating a loop using my code: aside from the fact that the 1st variable (VAR) does not increment, it loops more than the expected output. for sample purposes, test csv contains 3 lines. #get number of lines in the file lines=$( wc -l < test.csv ) ... (5 Replies)
Discussion started by: paoie
5 Replies

4. Shell Programming and Scripting

Using 'su' inside a loop

Hi, I am using su within a for loop. As you might expect, it prompts for password during each loop execution. Here is my piece of code: for i in $LIST do if then DATABASE=`echo $i | awk -F "|" '{ print $1 }'` USER_ID=`echo $i | awk -F "|" '{ print $2 }'` su - apstage -c... (1 Reply)
Discussion started by: sugan
1 Replies

5. Shell Programming and Scripting

Need help using sed inside the loop.

Hi, i have written a script. it collects data based on the sql queries executed by it. i have multiple output files. after the output file is made i need to do some cosmetic changes in the files and then store them. i am unable to use sed conditions inside the loop. see below code for... (3 Replies)
Discussion started by: dazdseg
3 Replies

6. Shell Programming and Scripting

BASH loop inside a loop question

Hi all Sorry for the basic question, but i am writing a shell script to get around a slightly flaky binary that ships with one of our servers. This particular utility randomly generates the correct information and could work first time or may work on the 12th or 100th attempt etc !.... (4 Replies)
Discussion started by: rethink
4 Replies

7. Shell Programming and Scripting

For Loop inside For loop

I am new to unix and trying to make a script for writing all my command into another file and use that file to run all commands I am trying to use for loop with echo command to generate a command based script for writing the file with all the command sequentially w.r.t for loop. I want... (6 Replies)
Discussion started by: nnani
6 Replies

8. UNIX for Dummies Questions & Answers

while loop inside a for loop

Hi, I am a newbie and would like to create a shell script that will move one file at a time from one path to another path in the same server. However, the next file should wait until the first file gets deleted by an application. I tried creating the script but right after the first file has... (1 Reply)
Discussion started by: rgomons
1 Replies

9. Shell Programming and Scripting

If inside If loop

Hi All, Below is the very simple code snippet but it si giving me syntax error #!/bin/bash #To ensure If JMS directory exists or not ServerName=$(hostname) #To ensure If JMS directory exists or not echo $ServerName if ; then echo "Inside First If" if ; then echo 'JMS... (4 Replies)
Discussion started by: sharsour
4 Replies

10. UNIX for Dummies Questions & Answers

Write a while loop inside for loop?

I'm taking a unix class and need to countdown to 0 from whatever number the user inputs. I know how to do this with a while or until loop but using the for loop is throwing me off.... I know I can use an if-then statement in my for loop but can I include a while loop in my for loop? (3 Replies)
Discussion started by: xxhieixx
3 Replies
itruns(8)						      System Manager's Manual							 itruns(8)

NAME
itruns - set up files for use by the it command SYNOPSIS
/sbin/itruns file [file...] in run-state [, file [file...] in run-state] [,...] DESCRIPTION
The itruns program sets up scripts to be run by it(8). (These programs are typically used within system configuration and installation scripts.) The itruns command searches for /sbin/it.d/bin/file. If itruns finds the file, it creates one or more symbolic links from /sbin/it.d/run-state.d/file to /sbin/it.d/bin/file. The run-state argument can be a single run state, or it can be two run states separated by either the word or or the word and. If two run states are specified with the or keyword, itruns checks for (and creates, if necessary) a directory whose name combines both run states and places a link in that directory so that the file will be executed when the it program detects either state. You can collapse two or-sepa- rated states into a single expression; for example, 2 or 3 can be expressed as 23. If the and keyword is used, itruns checks for (and cre- ates, if necessary) two separate directories and places a link in each of them so that either state triggers execution of the file indepen- dently of the other state. If two or more files are specified for a single run-state argument, links are created for all of the files as indicated by the run-state argument. If two or more combinations of files and run states are specified as comma-separated expressions, itruns treats each combination individu- ally. RESTRICTIONS
The itruns command must be executed from the root directory (/). The command finds only files that are located in the /sbin/it.d/bin direc- tory. EXAMPLES
This example sets up the doconfig script to be run when the system is booted to run state 2: itruns doconfig in 2 Either of the command lines in this example sets up the doconfig and getdate scripts to be run when the system is booted to run state 2 or to run state 3: itruns doconfig getdate in 2 or 3 itruns doconfig getdate in 23 This example sets up the doconfig script to be run when the system is booted to run state 2 and again when the system comes to run state 3, the getdate script to be run only in run state 2, and the getsysname script to be run only in run state 3: itruns doconfig in 2 and 3, getdate in 2, getsysname in 3 SEE ALSO
Commands: it(8) itruns(8)
All times are GMT -4. The time now is 10:58 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy