Shell Scripting Problem...

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!

Hello all,,, I am trying to finish my assignment for my CNET class. I am running into 2 problems... First the "Delete a file" (Option 1) When I run this option everything goes as planned except I am having problems with the confirmation. It comes up, ask for confirmtion, Y or N works great problem is it is persistant to loop the confirmatioin.

Second problem is with Option 8,,, Backing up a directory.
Again everything is going great with one small exception. If the Backup Directory does not exist already the script will make it, but after making the script it will not find the existing directory to backup until AFTER a return to the main menu and selecting the opiton again???

  1. The problem statement, all variables and given/known data:
 
#!/bin/ksh 
while :                                            
do                                       
clear                               
cat<<++                     
MAIN MENU
 1) Delete A File.   
 2) Rename A File. 
 3) Find A File.
 4) Display Contents Of A File in cat.    
 5) Edit A File In vi.
 6) List Contents Of A Directory.
 7) Move A File To A New Directory.
 8) Backup An Entire Directory.  
 X) Exit 
++
echo -n "Hello $LOGNAME, Please enter your selection:"
read selection
case $selection in
1) echo -n "Enter Filename To Delete:"
   read fname
    if [ -r $fname ]
     then
      while :
       do
        echo -n "Are You Certain You Want To Delete $fname? (y or n):"
         read confirm
         case $confirm in
          y|Y|YES|yes|Yes) rm $fname
           echo "File $fname Has Been Deleted, " ;;
          n|N|NO|no|No) echo "Wise Choice, File NOT Deleted, " ;;
          *) echo "Invalid Choice, Please Enter Y or N. "
         esac
       done
     else
      echo "Unable To Locate File $fname:"
    fi
   ;;
2) echo -n "Enter Filename To Rename:"
   read fname
    if [ -r $fname ]
     then
      echo -n "Enter New Filename:"
      read fname2
      mv $fname $fname2 
      echo "File Has Been Renamed, "
     else
      echo "Unable To Locate File $fname: " 
    fi
   ;;
3) echo -n "Enter Filename To Search For:"
   read fname
    locate $fname
   ;;
4) echo -n "Enter a filename:" 
   read fname
    if [ -r $fname ]
     then
      cat $fname
     else
      echo "Unable To Locate File $fname:"
    fi
   ;;
5) echo -n "Enter filename:"
   read fname
   for fn in $fname
   do
    if [ -r $fname ]
     then
      vi $fname
     else
      echo "Unable To Locate File $fname"
    fi
   done
   ;;
6) echo -n "Enter Directory Name: "
    read dname
    if [ -r $dname ]
     then
      ls -R -l $dname
     else
      echo "Unable To Locate Directory $dname, "
    fi
    ;;
7) echo -n "Enter Filename You Wish To Move: "
    read fname
     if [ -r $fname ]
      then
       echo -n "Enter Directory To Move File To: "
        read dname
         if [ -r $dname ]
          then
           mv $fname $dname
           echo "$fname Has Been Moved To $dname, "
          else 
           echo "Unable To Locate Directory $dname, "
         fi
      else 
       echo "Unable To Loate File $fname, "
     fi
    ;;
8) DIR=~/backups
    if [ -r $DIR ]
     then
      echo "Backup Directory Exist! Continuing,,,,, "
      echo -n "Enter Name Of Directory To Backup: "
       read dname
        if [ -r $dname ]
         then 
          cp -r $dname ~/backups
          echo "$dname Backup Has Ben Created in /home/USERNAME/backups, "
         else 
          echo "Unable To Locate Directory $dname, Returning To Main Menu, "
        fi
     else
      echo "Backup Directory Does Not Exist!"
      echo "Creating Dirtectory /home/USERNAME/backups..... "
      mkdir ~/backups
      echo "Backup Directory Created..... "
      echo -n "Enter Name Of Directory To Backup: "
       read dname2
        if [ -r dname2 ]
         then
          cp -r $dname2 ~/backups
          echo "$dname2 Backup Has Been Created in /home/USERNAME/backups, "
         else
          echo "Unable To Locate Directory $dname2, Returning To Main Menu, "
        fi
     fi
    ;;
q|Q|e|E|x|X) exit 0
             ;;
*) echo -n "Invalid choice, " 
   ;;
esac
echo -n "Press Enter To Return To Main Menu:"
read hold 
done
  1. Relevant commands, code, scripts, algorithms:

  2. The attempts at a solution (include all code and scripts):

I have tried changing everything I could think of. I am now desperate LOL..:frowning:

  1. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):

Lewis And Clark Community College, Godfrey IL, U.S.A.,

Mr. Rick Burgess

CNET200

Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).

You can probably rip out your own confirmation code and use rm -i

1 Like

(Sorry no time to test the whole script).

Option 1)
Once you have a definitive response from the user you need to get out of the "while :" loop with a "break" command.
Btw. There is a ";;" missing for the *) case.

y|Y|YES|yes|Yes) rm $fname
           echo "File $fname Has Been Deleted, "
           break
           ;;
n|N|NO|no|No) echo "Wise Choice, File NOT Deleted, "
           break
           ;;
*) echo "Invalid Choice, Please Enter Y or N. "
           ;;
1 Like

Thank You!! Funny how the smallest thing can fix a really pain in the *** problem... LOL

I spent way too much time trying to figure that out. It doesnt outline the input (Y or N) but it will accept all versions. This will work great...

Thanks again,,

1 down 1 to go.....

---------- Post updated at 06:13 PM ---------- Previous update was at 06:11 PM ----------

Sweet!! Thank you very much,,, I knew it had something to do with the while loop,,, Im not familiar enough with it that I forgot the break...Now I can fix my version of the confirmation..

Just tried it out and it works a treat! Thank you so much...

---------- Post updated at 06:25 PM ---------- Previous update was at 06:13 PM ----------

I belive my remaining problem lies in the code below. Like I said if the backups directory already exist then everything runs fine. If it doesnt then it has to create it,, which it does ok,, ,but for some reason it will not find an existing directory when using this section... But when you exit back to the Main Menu then try again,, This time using the existing directory section of code because the backups directory now exist,, it will run fine then.

else
echo "Backup Directory Does Not Exist!"
echo "Creating Dirtectory /home/USERNAME/backups..... "
mkdir ~/backups
echo "Backup Directory Created..... "
echo -n "Enter Name Of Directory To Backup: "
read dname2
if [ -r dname2 ]
then
cp -r $dname2 ~/backups
echo "$dname2 Backup Has Been Created in /home/USERNAME/backups, "
else
echo "Unable To Locate Directory $dname2, Returning To Main Menu, "
fi
fi
;;

if [ -d "${dname2}" ]

Thank you vgersh99! That did it... I cant belive I missed these little things..

I guess starting at them for 2 hours wasnt enough LOL...

You guys are the best,,,

Thanks again.:b: