I need to Write a shell script that allows some system-administration tasks to be preformed automatically from a menu-driven interface. with automated following tasks:
Copy directory tree
Delete files or directories
Output Information (this part is done )
*Copy directory tree
The “Copy directory tree” selection should prompt for two arguments: src & dest.
The script then copies all the files from src, including all the subdirectories, to dest,
creating all the necessary sub-directories.
The script must perform necessary argument validation, assuming that the first argument may be either a directory name or the name of a regular file, while the second may be only a directory name.
my problem with this assignment is I can not read user input inside the "case" options.
I think I need to ask user to enter src and dest for copying the files.
this is my code so far
Code:
#!/bin/sh
clear
echo "\t `date "+%d/%m/%Y"`"
echo "\t Hostname Machine: `hostname`"
echo "\t user: `whoami` "
echo "\t M A I N - M E N U"
echo "\t 1.Copey Directory Tree"
echo "\t 2.Delete Files or Directories"
echo "\t 3.Output Information"
while true ; do
echo -n "\t Please enter an option [ 1 - 4 ] : "
read opt
case "$opt" in
1) echo "Enter the source and destination for copying files" ;;
#read src dest ;;
#echo "$src" ;;
#echo "$dest" ;;
2) ;;
3) echo "\t the number of possible users on the system: `cat /etc/passwd |wc -l` \n\t the number of current user on the system : `who | wc -l`\n\t the number of processes running: `ps -e | wc -l`" ;;
*) exit ;;
esac
done
Langara College , Vancouver , Canada , Hengameh Hamavand , CPSC 1280
I tried with following modification and able to read user input and print them:-
Code:
#!/bin/sh
clear
echo "\t `date "+%d/%m/%Y"`"
echo "\t Hostname Machine: `hostname`"
echo "\t user: `whoami` "
echo "\t M A I N - M E N U"
echo "\t 1.Copey Directory Tree"
echo "\t 2.Delete Files or Directories"
echo "\t 3.Output Information"
while true ; do
echo -n "\t Please enter an option [ 1 - 4 ] : "
read opt
case "$opt" in
1) echo "Enter the source and destination for copying files"
read src
read dest
echo "$src"
echo "$dest"
;;
2) ;;
3) echo "\t the number of possible users on the system: `cat /etc/passwd |wc -l` \n\t the number of current user on the system : `who | wc -l`\n\t the number of processes running: `ps -e | wc -l`" ;;
*) exit ;;
esac
done
The “Delete files or directories” selection should prompt for a list of files or directories to be deleted. The script asks user for confirmation before deleting a file or a whole directory. The script must perform reasonable argument validation.
I tried to read the list of files and directories in a string but it is pretty hard to split the string based on space and put them in an array and then check them one by one and delete them. Also I was thinking to run a while loop to ask user to enter the name of file and then delete it and again repeat the job but it is not a nice way.
would you give me some clue?
Code:
#!/bin/sh
clear
echo "\t `date "+%d/%m/%Y"`"
echo "\t Hostname Machine: `hostname`"
echo "\t user: `whoami` "
echo "\t M A I N - M E N U"
echo "\t 1.Copey Directory Tree"
echo "\t 2.Delete Files or Directories"
echo "\t 3.Output Information"
while true ; do
echo -n "\t Please enter an option [ 1 - 4 ] : "
read opt
case "$opt" in
1) echo "Enter the source of the files and destination for copying "
read src dest
if [ -n "$src" -a -n "$dest" ]
then
if [ -d "$src" -o -f "$src" -a -d "$dest" ]
then
cp -r "$src" "$dest"
else
echo "Enter the valid file or directory addresses"
fi
else
echo "please enter valid address as a source and destination to copy the files "
fi ;;
2) echo "enter the name of files want to be deleted"
read files
for f in "$files"
do
echo "$f\n"
done
;;
3) echo "\t the number of possible users on the system: `cat /etc/passwd |wc -l`"
echo "\t the number of current user on the system : `who | wc -l`"
echo "\t the number of processes running: `ps -e | wc -l`"
;;
*) exit ;;
esac
done
---------- Post updated at 02:13 AM ---------- Previous update was at 12:50 AM ----------
Code:
2) echo "enter the name of files want to be deleted"
read a
for CHARACTER in $a ; do
if [ -f $CHARACTER -o -d $CHARACTER ] ; then
rm -ir $CHARACTER
else
echo "$CHARACTER is not a valid file or directory"
fi
done
;;
I'm having an issue with bash read input when using a case statement.
The script halts and doesn't read the input on the first loop. if I hit enter then the scripts starts to respond as expected. Need some help here.
defaultans=8hrs
read -e -i $defaultans -p "${bldwht}How long would you like... (5 Replies)
Hi Experts,
Need your guidance for case statement. I tried many way but no success yet.Now my existing code is doing something like below. Each Line of the input file contains one test case.#!/bin/bash
FILE=$1
while read LINE; do
do COMMAND
done < $FILE
Now I want to modify the code... (6 Replies)
Hi,
This query is a part of a much more lengthy script.
I wish to look for all the files in a folder named "data" which in this case has two files i.e. plan.war and agent.properties. For all the files found under data I wish to ask the user as to where they wish copy the files to.
Below,... (14 Replies)
Hi,
I am working on a script, which requests users to enter input.
Ex: read -p "Please enter your email id:" email
I don't want users skipping this entry, this has to be mandatory.I dont want to proceed without input.
I can do a check if variable $email is empty and proceed if not.But, i... (7 Replies)
Hi
I am new to writing script and want to use a Bash Piped while-read and read from user input.
if something happens on server.log then do while loop or if something happend on user input then do while loop.
Pseudocode something like:
tail -n 3 -f server.log | while read serverline || read... (8 Replies)
hi, i will like to know whether awk command can ignore case?
i written a script that will take in user input and search for data on the 1st field from a text file.
echo -n "Title:"
read title
awk -F":" '$1~/'"$title"'/{print $0}' Filename
read ans
return
... (5 Replies)
Hi all
Does anyone have a script that will allow me to stop inside a while read loop.
I want to pause the loop until a enter is pressed.
e.g.
While read line
do
echo something
if LINECOUNT > 40
then
read ENTER?"PRESS ENTER TO CONT..."
... (3 Replies)