![]() |
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| php script + not displaying webpage | JamesGoh | Web Programming, Web 2.0 and Mashups | 1 | 03-04-2009 06:01 PM |
| Recursive call to find files and directories in Shell script from current path. | Ramit_Gupta | Shell Programming and Scripting | 2 | 10-07-2008 04:33 AM |
| Displaying Array Elements in Shell Scripts | ananddr | Shell Programming and Scripting | 2 | 09-16-2008 07:53 AM |
| shell script to delete directories... | Stephan | Shell Programming and Scripting | 8 | 05-18-2008 11:00 AM |
| shell script to delete directories... | Stephan | Shell Programming and Scripting | 5 | 05-16-2008 08:11 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Help with Shell Script displaying Directories
I am new to shell programming and have an assignment question which requires me to list the contents of the present working directory in 4 column format and highlight any subdirectories. It then requires me to develop the shell script to accept a directory name as a positional parameter (if no parameter use the present working directory); then adapt is to accept more than one directory as positional parameters; and finally adapt it to display the name of the sub directory and ask whether to: descend and list the contents, list the contents without changing the present working directory, or ignore the directory. (it was suggested that a recursive call would be handy)
I am struggling to write a shell script which performs this task. I found the following script in a forum which i think was written for old version shell (SH). I have tried to reuse this shell and adapt it to the BASH shell. If anyone is able to help me either adapt the below code or have any suggestions on how i can go about this question. Please help. Major thanks in anticipation. Code:
#!/bin/sh
if [ -n "$1" ]
then
WORKDIR=$1
else
WORKDIR=`pwd`
fi
WORKDIR=`echo $WORKDIR | awk \
'{
if (substr($0,length($0),1)=="/")
{
print substr($0,1,length($0)-1)
} else {
print $0
}
}'`
echo $WORKDIR
for DIR in `ls -l $WORKDIR | grep "^d" | awk '{ print $NF }'`
do
echo "Found directory $DIR, Decend, List, Ignore (D,L,I) ?"
read DLI
DLI=`echo $DLI | tr "dli" "DLI"`
case $DLI in
"D" ) $0 $WORKDIR/$DIR;;
"L" ) ls -l $WORKDIR/$DIR | grep -v "^d" | awk -v COUNTER=0 \
'{
printf "%s ",$NF
COUNTER++
if (COUNTER>=5)
{
printf "\n"
COUNTER=0
}
}' | column -t;;
"I" ) echo "Ignored directory $DIR";;
esac
done
ls -l $WORKDIR | grep -v "^d" | awk -v COUNTER=0 \
'{
printf "%s ",$NF
COUNTER++
if (COUNTER>=5)
{
printf "\n"
COUNTER=0
}
}' | column -t
Last edited by Franklin52; 04-21-2009 at 03:54 AM.. Reason: adding code tags |
|
||||
|
Thank - you very much for your reply and thanks for the starting point. Could you please just briefly explain what the following lines are doing just so i fully understand.
Code:
for file in *
do
[ -d "$file" ] &&
files[${#files[@]}]=$file/ ||
files[${#files[@]}]=$file
done
|
|
||||
|
how to test if a directory or not?
I have got the following segment of code. It is going through each file/directory in the present working directory and asking whether it should descend into the directory. If deciding to descend it recalls the shell script with the new directory as a parameter. This is probably not the most efficient way of doing/writing this code but it seems to work. What i want to do is though, i want to only execute this code if it is a directory not if its a file. How do i test for if its a directory before descending into the code.
[/QUOTE] |
|
|||||
|
|
||||
|
I have got my coding to the following. So far the code calls a function which is used to go through the contents of the directory and ask whether to descend (which recalls the function with the new directory), list the contents of the directory (which calls the another function designed to list the contents).
My problem is with the listing of the contents. Displaying the contents of the first directory is fine. When i go to display the contents of the second directory, what is displayed is the contents of the first directory with the contents of the second directory appended to the end. I do not want this to happen, i only want it to display the contents of the current directory only. What have i done wrong to make it do this. Also at present my shell is only set up to accept one parameter, how would i go about setting it up to accept multiple parameters. Use a while loop maybe around the calling functions incrementing the parameter number??
|
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|