Too many if statements..


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Too many if statements..
# 1  
Old 11-20-2011
Too many if statements..

Hello. I am new here and new to scripting. I used to have a very basic script that worked for simple backup/restore of files. I have expanded it and well... I have ended up with a complete mess. It still backs up and restores but there is so many issues that stem from the many if statements I tried to attach for error detection, overwriting. I know there is better ways to do things but I want to see where my problems lie before I try to condense it.

One problem I have noticed is that if I start the script and select b to backup then select w to backup word docs and then decide to not backup, I get taken back to the main menu as it should. However, if I then choose to quit it gives me "The backup has been completed and stored in the appropriate folder" message as if the backup has taken place. If I run the script from scratch and select q to quit it exits fine. Obviously my if statements are conflicting. Here is all my code.

Back story for files/directories

If you backup, the type of file you selected (word etc) gets copied from the workfiles directory to the users home folder under the same name.

If you restore, stuff gets moved from home folder to workfiles directory (based on if you choose w, s or p). Very simple. I have not implemented proper overwriting besides checking if the folder exists. I think I can use cp -i for overwriting protection but not checked it yet as I have been busy figuring out the issue I described above.

Code:
#!/bin/sh

# Checking if necessary directories have been made previously and making them if not
if [ ! -d ~/wp ]
then mkdir ~/wp
fi
if [ ! -d ~/ss ]
then mkdir ~/ss
fi
if [ ! -d ~/pics ]
then mkdir ~/pics
fi

# Clear the window of any information before the script starts
clear

# Displaying the choices to a user

echo Option b - Backup files
echo Option r - Restore files
echo Option q - Quit the script

echo Please input b, r or q

# The below lines check that a B, R or Q has been inputted and if not, displays an error
read CHOICE
while [ "$CHOICE" != b -a "$CHOICE" != r -a "$CHOICE" != q ]
do
echo You must enter either b, r or q
read CHOICE
done

# The below lines direct input based on user choice

if [ "$CHOICE" = b ]
then
echo Backup has been selected
echo Choose what type of files you would like to backup
echo Type 'w' for word processing
echo Type 's' for speadsheet
echo Type 'p' for pictures

read BACKUP
# Setting up a loop to ensure data given is valid
while [ "$BACKUP" != w -a "$BACKUP" != s -a "$BACKUP" != p ]
do
echo "Please select a valid letter (w, s or p)"
read BACKUP
done

echo You selected $BACKUP

if [ -d ~/wp ] || [ -d ~/ss ] || [ -d ~/pics ]
then
echo You might be overwriting files. Okay to overwrite?
echo Yes = y No = n
echo If you select No you will be returned to the menu

read OVERWRITE
while [ "$OVERWRITE" != y -a "$OVERWRITE" != n ]
do
echo You must enter y or n
read OVERWRITE
done
fi

if [ "$OVERWRITE" = y ]
then
case $BACKUP in
w) cp /workfiles/wp/* ~/wp/;;
s) cp /workfiles/ss/* ~/ss/;;
p) cp /workfiles/pics/* ~/pics/;;
esac
else [ "$OVERWRITE" = n ]
./scriptfile
fi

# Informing the user of progress and a successful completion of backup
echo The backup has been completed and stored in the appropriate folder

# Giving the user the option to return to the main menu or exit
echo Would you like to go back to the menu and select another option?
echo Yes = y No = n

read OPTION
while [ "$OPTION" != y -a "$OPTION" != n ]
do
echo You must enter y or n
read OPTION
done

if [ "$OPTION" = y ]
then
./scriptfile
else [ "$OPTION" = n ]
exit
fi

elif [ "$CHOICE" = r ]
then
echo Restore has been selected
echo Choose what type of files you would like to restore
echo Type 'w' for word processing
echo Type 's' for speadsheet
echo Type 'p' for pictures

read RESTORE
# Setting up a loop to ensure data given is valid
while [ "$RESTORE" != w -a "$RESTORE" != s -a "$RESTORE" != p ]
do
echo "Please select a valid letter (w, s or p)"
read RESTORE
done

echo You selected $RESTORE

case $RESTORE in
w) cp ~/wp/* /workfiles/wp/;;
s) cp ~/ss/* /workfiles/ss/;;
p) cp ~/pics/* /workfiles/pics/;;
esac

# Informing the user of progress and a successful restoration
echo  The restore has been completed. The type of files you selected have  been copied from your home directory to the workfiles directory.

# Giving the user the option to return to the main menu or exit
echo Would you like to go back to the menu and select another option?
echo Yes = y No = n

read OPTION2
while [ "$OPTION2" != y -a "$OPTION2" != n ]
do
echo You must enter y or n
read OPTION2
done

if [ "$OPTION2" = y ]
then
./scriptfile
else [ "$OPTION2" = n ]
exit
fi

# Exits the script when Q is selected
else [ "$CHOICE" = q ]
exit
fi

# 2  
Old 11-20-2011
Code:
# Checking if necessary directories have been made previously and making them if not
if [ ! -d ~/wp ]
then mkdir ~/wp
fi
if [ ! -d ~/ss ]
then mkdir ~/ss
fi
if [ ! -d ~/pics ]
then mkdir ~/pics
fi

change to:
Code:
mkdir -p ~/wp  ~/ss ~/pics

Code:
 -p, --parents     no error if existing, make parent directories as needed

---------- Post updated at 10:04 AM ---------- Previous update was at 09:57 AM ----------

Code:
read OPTION
while [ "$OPTION" != y -a "$OPTION" != n ]
do
echo You must enter y or n
read OPTION
done

if [ "$OPTION" = y ]
then
./scriptfile
else [ "$OPTION" = n ]
exit
fi

change to:

Code:
while true
do
    read OPTION
    case $OPTION in
        [yY] | [yY][Ee][Ss] )
                ./scriptfile
                ;;

        [nN] | [n|N][O|o] )
                exit 
                ;;
        *) echo "You must enter y or n"
            ;;
    esac
done

For the rest, if you understand above code, you can update by yourself.
# 3  
Old 11-20-2011
Hi. I used your

Code:
mkdir -p ~/wp  ~/ss ~/pics

as I understood it. I don't however understand that case statement, particularly this area.

Code:
[yY] | [yY][Ee][Ss]

I also guess you think I should use your example and completely abolish all my use of the if statements for this case example? I would probably do this in the future but I really want to see where I messed up that when I select q after selecting no to an overwrite that it says a backup has been made.
# 4  
Old 11-20-2011
for case statement, try it, you can reduce to use more if statements.

With while loop, you can remove option2's code. For the q option, if you totally understand my code, you can update it by yourself. Of course, I will not update your code directly, it is not my job.

Code:
while true
do
    echo " what's your option?"
    read OPTION
    case $OPTION in
        Y|y  )
                echo ./scriptfile
                ;;
        N|n )
                echo " no need backup"
                ;;
        Q|q )
                exit
        *) echo "You must enter y or n"
            ;;
    esac
done

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

if and then statements

I came across a bash script that outputs the forecast for the day and the max temperature but at the end of the day the max temperature disappears ($6) and I am left with "°C" after the forecast. Here is the script: #! /bin/bash curl -s --connect-timeout 30... (7 Replies)
Discussion started by: _light_
7 Replies

2. Homework & Coursework Questions

Using While and If statements

1. The problem statement, all variables and given/known data: Two problems I need solving please. I created a script where the user types in 7 numbers as standard input and each one is then stored in an array. Now I need to perform the following calculations on those numbers: 1) Use a while... (11 Replies)
Discussion started by: jjb1989
11 Replies

3. Shell Programming and Scripting

Using While and If statements

Hi guys, Two problems I need solving please. I created a script where the user types in 7 numbers as standard input and each one is then stored in an array. Now I need to perform the following calculations on those numbers: 1) Use a while loop to determine the largest number in the range. ... (2 Replies)
Discussion started by: jjb1989
2 Replies

4. Shell Programming and Scripting

vi and if statements

Hi I am very new to Unix programming and shell scripting. I am trying t figure out how to write a little script that will output the number of directories. I can find the number of directories using ls -l | grep "^d" | wc -l I can not figure out how to do it so when I type the name... (8 Replies)
Discussion started by: Reddoug
8 Replies

5. Shell Programming and Scripting

Help with IF statements

I am writing a script that does a search for a argument in a file and lists all like occurrences. The script verifies that it is a file and then runs another script that list the lines. My problem is that I need the script to accept a file or a directory and then go to that directory check all... (1 Reply)
Discussion started by: zero3ree
1 Replies

6. Shell Programming and Scripting

If statements....

Good morning all! I want to know if Im interpreting this if statement below right. if(((1) || (0)) && (1)){ do stuff; } This is saying: if true piped into false, then true, then do stuff. Right? What does the && stand for? thanks in advance! ben (3 Replies)
Discussion started by: bigben1220
3 Replies

7. UNIX for Dummies Questions & Answers

Help with For Statements

Hi, I am trying to write a for statement that will allow for the ps, who, finger, and date commands to run. Can anyone help? I use Putty. (22 Replies)
Discussion started by: lexydoll87
22 Replies

8. UNIX for Advanced & Expert Users

if statements

This is for a program I have to do to calculate the day of the week. I need to write an if statement that will do the following: if day is 29 and year is odd, don't calculate dayif ( day == 29 && year == ??? )I know how to do it for the day but I don't know how to do it for the year. (4 Replies)
Discussion started by: pwanda
4 Replies

9. Shell Programming and Scripting

Please help on IF statements.

I had different problem scenarios with IF statement. Can any expert please enlighten me on the difference with these scenarios. Thank you. 1st Scenario: testdate=`date +%Y%m` test=`cat /var/log/database0.$testdate*.log | grep "Errors found during processing" | tail -10` if then ... (4 Replies)
Discussion started by: filthymonk
4 Replies

10. UNIX for Dummies Questions & Answers

if statements

I am trying to change this : Albert Einstein 52 Peter Scott 22 Hilary Smith 48 Joan Bakewell 30 Catherine Maguire 26 into Albert Einstein Pass Peter Scott Fail Hilary Smith Pass Joan Bakewell Fail Catherine Maguire Fail I have to use a if statement that says: if field 3 is... (2 Replies)
Discussion started by: lilas
2 Replies
Login or Register to Ask a Question