Script Stuck In Loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Script Stuck In Loop
# 1  
Old 09-20-2009
Script Stuck In Loop

Hi all! Im trying to get this script to check for folders in a year/month/day folder structure and if the day doesnt exist then it makes the day. It will also make sure all of the days before todays date exist as well. This script assumes that the month and year folder already exist. It works fine until it finds a day that already exists then it gets stuck in a loop.

Code:
cd ~/Desktop
stopday=1
year=`date +%Y`
month=`date +%m`
day=`date +%d`
if [ -d $year ]
    then echo $year
    cd $year
    if [ -d $month ]
        then echo $month
        cd $month
        while [ $day -ge $stopday ]
        do if [ -d $day ]
            then echo $day
            cd $day
            if [ -d products ]
                then echo ""$month"/"$day"/"$year" directory already exists."
                cd ..
                else mkdir products
                echo "Made "$month"/"$day"/"$year" directory!"
                cd ..
            fi
            else mkdir $day
            cd $day
            if [ -d products ]
                then echo ""$month"/"$day"/"$year" directory already exists."
                cd ..
                else mkdir products
                echo "Made "$month"/"$day"/"$year" directory!"
                cd ..
            fi        
        day=`expr $day - 1`
        if [ $day -lt 10 ]
            then day=0$day
        fi
        fi
        echo $day
        done
    fi
fi

# 2  
Old 09-20-2009
Quote:
Originally Posted by Grizzly
Hi all! Im trying to get this script to check for folders in a year/month/day folder structure and if the day doesnt exist then it makes the day. It will also make sure all of the days before todays date exist as well. This script assumes that the month and year folder already exist. It works fine until it finds a day that already exists then it gets stuck in a loop.

Code:
cd ~/Desktop
stopday=1
year=`date +%Y`
month=`date +%m`
day=`date +%d`
if [ -d $year ]
    then echo $year
    cd $year
    if [ -d $month ]
        then echo $month
        cd $month
        while [ $day -ge $stopday ]
        do if [ -d $day ]
            then echo $day
            cd $day
            if [ -d products ]
                then echo ""$month"/"$day"/"$year" directory already exists."
                cd ..
                else mkdir products
                echo "Made "$month"/"$day"/"$year" directory!"
                cd ..
            fi
            else mkdir $day
            cd $day
            if [ -d products ]
                then echo ""$month"/"$day"/"$year" directory already exists."
                cd ..
                else mkdir products
                echo "Made "$month"/"$day"/"$year" directory!"
                cd ..
            fi        
        day=`expr $day - 1`
        if [ $day -lt 10 ]
            then day=0$day
        fi
        fi
        echo $day
        done
    fi
fi

From the layout of your code it is totally unclear which "if then else fi"'s belong together. At least it is to me.

Anyway, this is your code (leaving out some parts):

Code:
if [ -d $day ]
then
   echo $day
   cd $day
   .
   .
   .
else
  mkdir $day
  cd $day
   .
   .
   .
   day=`expr $day - 1`
   if [ $day -lt 10 ]
   then
      day=0$day
   fi
fi

Correct code, a bit simplified:

Code:
cd ~/Desktop

stopday=1

year=`date +%Y`
month=`date +%m`
day=`date +%d`

if [ -d $year ]
then
  echo $year
  cd $year

  if [ -d $month ]
  then
    echo $month
    cd $month

    while [ $day -ge $stopday ]
    do
      if [ -d $day ]
      then
        echo $day
      else
        mkdir $day
      fi

      cd $day

      if [ -d products ]
      then
        echo ""$month"/"$day"/"$year" directory already exists."
      else
        mkdir products
        echo "Made "$month"/"$day"/"$year" directory!"
      fi

      cd ..

      day=`expr $day - 1`
      if [ $day -lt 10 ]
      then
        day=0$day
      fi

      echo $day
    done
  fi
fi

# 3  
Old 09-20-2009
Thanks for the help. Yea its a bit obscure of a layout but I can read it. I suppose I should learn something a bit more readable hah.
# 4  
Old 09-20-2009
As a side note, here's a different approach to tackle your problem that involves the use of the "seq" command. My setup is Bash on Linux, check your documentation to see if you have it.

Code:
$ 
$ cat -n testscr1.sh
     1    #!/bin/bash
     2    
     3    yr=$(date +%Y)
     4    mon=$(date +%m)
     5    dt=$(date +%d)
     6    
     7    if [ -d $yr/$mon ]; then
     8      for i in $(seq -w $dt -1 1)
     9      do
    10        if [ -d $yr/$mon/$i/products ]; then
    11          echo $yr/$mon/$i/products was found.
    12        else
    13          mkdir -p $yr/$mon/$i/products
    14          echo $yr/$mon/$i/products was not found. Created it.
    15        fi 
    16      done
    17    fi
    18    
$ 
$ 
$ find ./2009 | sort
./2009
./2009/09
./2009/09/04
./2009/09/04/products
./2009/09/13
./2009/09/15
./2009/09/15/products
./2009/09/19
$ 
$ # now run the script
$ ./testscr1.sh
2009/09/20/products was not found. Created it.
2009/09/19/products was not found. Created it.
2009/09/18/products was not found. Created it.
2009/09/17/products was not found. Created it.
2009/09/16/products was not found. Created it.
2009/09/15/products was found.
2009/09/14/products was not found. Created it.
2009/09/13/products was not found. Created it.
2009/09/12/products was not found. Created it.
2009/09/11/products was not found. Created it.
2009/09/10/products was not found. Created it.
2009/09/09/products was not found. Created it.
2009/09/08/products was not found. Created it.
2009/09/07/products was not found. Created it.
2009/09/06/products was not found. Created it.
2009/09/05/products was not found. Created it.
2009/09/04/products was found.
2009/09/03/products was not found. Created it.
2009/09/02/products was not found. Created it.
2009/09/01/products was not found. Created it.
$ 
$ # check the directories
$ find ./2009 | sort | grep products
./2009/09/01/products
./2009/09/02/products
./2009/09/03/products
./2009/09/04/products
./2009/09/05/products
./2009/09/06/products
./2009/09/07/products
./2009/09/08/products
./2009/09/09/products
./2009/09/10/products
./2009/09/11/products
./2009/09/12/products
./2009/09/13/products
./2009/09/14/products
./2009/09/15/products
./2009/09/16/products
./2009/09/17/products
./2009/09/18/products
./2009/09/19/products
./2009/09/20/products
$ 
$

tyler_durden
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Error in script, STUCK :(

Hi All, I am beginner in scripting. I wrote a simple script to perform some task. It seem to have some error in command line, Kindly somebody help. Thanks #!/bin/bash date cd /home/poojasaxena/Desktop/CMS/script/DataMCMatch function pause(){ read -p "$*" } FILE=$1... (22 Replies)
Discussion started by: nrjrasaxena
22 Replies

2. Shell Programming and Scripting

Stuck in this shell script - please help

hi: I'm trying to write a shell script that recognizes all .txt files in all the subdirectories in my current directory. Let's say that i have a directory called Applications which consists of many subdirectories on mnay levels. i want the shell script to look for all .txt files that exist... (14 Replies)
Discussion started by: miss_dodi
14 Replies

3. Shell Programming and Scripting

Noob stuck - where do I put my loop

I'm a noob working on a script to take 3 user inputs. One of them is simply a variable: "poolname". The other 2 are cases: "groupa/groupb" and "enable/disable". "groupa" and "groupb" reference 2 files - groupa.txt or groupb.txt. These files simply consist of a list of server IP addresses and port... (2 Replies)
Discussion started by: *nixnoob
2 Replies

4. Shell Programming and Scripting

perl loop keeps getting stuck

I am using a Perl script to open a series of files in a loop, separate the paragraph into lines, and output the lines into a new file. The code works perfectly fine, except when the source file is over a certain size the loop gets stuck and won’t move on to the next file. It still does what it is... (0 Replies)
Discussion started by: renthead720
0 Replies

5. Shell Programming and Scripting

I am stuck in my script

Hi All I have script that find 777 dir with specific extension like .php .Now after finding all 777 directory i will place in httpd.conf using a directory directive ,Now i was not do that,if directory entry exitst in httpd.conf then script ignor it dont show me at stdout else if it dont find... (2 Replies)
Discussion started by: aliahsan81
2 Replies

6. UNIX for Dummies Questions & Answers

stuck with a script

Hi There I am pretty new to UNIX and have only been using it from a basic point of view,I now want to start using it and learning more , have got a whole lot of books and documentation from the web and am slowly learning.I have written a get script in windows :- lcd E:\MAIN\PRO\FILES\MAINDB... (1 Reply)
Discussion started by: FOCKER
1 Replies

7. Shell Programming and Scripting

simple script but am stuck

hey i am a bit stuck here. i just started work experience and i need to create a simple script which delete all files in a specify folder which are older then 2 days. :mad: i tried but it never works!!! anyone! i dont know much but unix since i mostly work on NT here but i dont wanna disapoint my... (2 Replies)
Discussion started by: GermanJulian
2 Replies

8. UNIX for Dummies Questions & Answers

Menu function stuck in a loop?

I having problem when I call this cleanupmenu function within a script. It continuously loops and goes to selection * That wasn't a valid selection. I have to kill it everytime to stop it. What am I doing wrong. I use this function menu in several other scripts and I don't have this problem at... (2 Replies)
Discussion started by: darthur
2 Replies

9. Shell Programming and Scripting

stuck on ksh script

hi, i need help to write script in korn shell that will display info. on system paging, system process table.system file table inf. thank you (1 Reply)
Discussion started by: neer45
1 Replies
Login or Register to Ask a Question