Loop problem with one more problem


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Loop problem with one more problem
# 1  
Old 09-22-2008
Question Loop problem with one more problem

Hi ALL
I am greping some thing from a file,some thing is "/var/www/html" /var/www"/example" and so on its showing like this when u use echo.i want to pass each one of them in a loop for processing.Like start with /var/www/html then 2nd and so one
But that not working any iead how i give one by one value.
My code

docroot=$(grep -H DocumentRoot /etc/httpd/conf.d/*.conf | awk -F' ' '{ print $3 }'| sort -u | uniq)
doccount=$(grep -H DocumentRoot /etc/httpd/conf.d/*.conf | awk -F' ' '{ print $3 }'| sort -u | uniq | wc -l)

for (( i=0; i <= $doccount; ++i ))
do
confd="$docroot\n"
echo $confd
find $confd -type d -perm /o=w | while read DIR
do
do some thing

done ## while done
done ##for done
# 2  
Old 09-22-2008
Quote:
Originally Posted by aliahsan81
Hi ALL
I am greping some thing from a file,some thing is "/var/www/html" /var/www"/example" and so on its showing like this when u use echo.

Please use English in this forum. Write "you", not "u".
Quote:
i want to pass each one of them in a loop for processing.Like start with /var/www/html then 2nd and so one
But that not working any iead how i give one by one value.

What does "not working" mean? What does happen? What do you want to happen?
Quote:
My code

Please put code inside [CODE] tags.
Quote:
Code:
docroot=$(grep -H DocumentRoot /etc/httpd/conf.d/*.conf |
 awk -F' ' '{ print $3 }'| sort -u | uniq)


You don't need uniq; you have already removed duplicates with sort -u.

In fact, you don't need sort, either. It can be done with awk alone:

Code:
docroot=$(grep -H DocumentRoot /etc/httpd/conf.d/*.conf |
 awk -F' ' '!x[$3]++ { ++n } END { print n }'

Quote:
Code:
doccount=$(grep -H DocumentRoot /etc/httpd/conf.d/*.conf |
 awk -F' ' '{ print $3 }'| sort -u | uniq | wc -l)

for (( i=0; i <= $doccount; ++i ))


It is safer to stick to standard syntax:

Code:
i=0
while [ $i -le $doccount ]
do
   : whatever
   i=$(( $i + 1 ))
done

Quote:
Code:
 do
        confd="$docroot\n"

Code:
        confd="$docroot"

Quote:
Code:
echo $confd
        find $confd -type d -perm /o=w | while read DIR
do
do some thing 

done ## while done
done ##for done

# 3  
Old 09-23-2008
Thanks for reply,Not working means when i pass one value in loop to Variable $confd,I don't process it instead it consider online with all the document root.I show you my code,and if i run staticelly using /var/www/html output is fine but when i put
in loop problem occourced.I show you output for both.


Code:
#!/bin/bash
let test=0

abc="/var/www/html"
docroot=$(grep -H DocumentRoot /etc/httpd/conf.d/*.conf | awk -F' ' '{ print $3 }'| sort -u | uniq)
doccount=$(grep -H DocumentRoot /etc/httpd/conf.d/*.conf | awk -F' ' '{ print $3 }'| sort -u | uniq | wc -l)
#i=0
#while [ $i -le $doccount ]
# do
#    confd="$docroot\n"
#echo $confd
    find $abc -type d -perm /o=w | while read DIR
    do

    test=$(cd "$DIR"; ls -A *.html *.php  2>/dev/null | wc -l)

        if [ "$test" != "0" ]
                   then


            echo "DIR Found WITH FILES"$DIR $test
           fi


        if [ `ls -a "$DIR" | wc -l` -le 2 ]
    
                   then

            echo "Writable_dir Empty"$DIR
            fi


    done
#i=$(( $i + 1 ))
#done


        count=$(find /var/www/html/ -type f -perm /o=w | grep -i ".htaccess"| wc -l )

        find "$abc" -type f -perm /o=w | grep -i ".htaccess" | awk  -F. '{ print $1 }' | while read this

        do
        echo "_htaccess_is_Writable"$this
        done
 
Output with static docroot

DIR Found WITH FILES/var/www/html/test3 4
DIR Found WITH FILES/var/www/html/test3/abc 2
Writable_dir Empty/var/www/html/abc
DIR Found WITH FILES/var/www/html/test/abc 1
DIR Found WITH FILES/var/www/html/test2 1


Output with duynamic Docroot


"/var/www/html" "/var/www/test/www.example.com" "/var/www/www.example.com"\n
find: "/var/www: No such file or directory
find: "/var/www/test: No such file or directory
find: "/var/www: No such file or directory
"/var/www/html" "/var/www/test/www.example.com" "/var/www/www.example.com"\n
find: "/var/www: No such file or directory
find: "/var/www/test: No such file or directory

# 4  
Old 01-07-2009
Your code is a little wrong there in your assigning multiple directories to the docroot and adding a newline. No need for the new line. Set confd to "$docroot" not "$docroot\n". When you do the find $confd it will put a newline in command line where it doesn't belong.

#while [ $i -le $doccount ]
# do
# confd="$docroot\n"
#echo $confd

confd="$docroot"
find $confd -type d -perm /o=w | while read DIR

which would be

find /var/www/html /var/www/test/www.example.com /var/www/www.example.com -type d -perm /o=w | while read DIR
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Problem with loop

Hi all, a problem with a loop. Imagine it starts with var1="$(cat txtif.out )"while do echo file1 echo file2 echo y > txtif.out if then break fi done exit 0 the problem is that if the file is changing during the loop seems to continue as it reads "x" state,... (5 Replies)
Discussion started by: Board27
5 Replies

2. Shell Programming and Scripting

Problem with While Do loop

I am trying to do a while do loop that asks for a password and returns if the password entered is incorrect. I have that part working however i want to modify it so that if a similar word is entered it will read "that is close but incorrect" and i cannot seem to get it working, being new in the... (6 Replies)
Discussion started by: lm5522
6 Replies

3. Programming

While loop problem in C

Hello friends, Please have a look at this code, and then i will tell you the problem. int main() { int i = 0; int cont = 1; while( cont == 1 ) { printf( "Enter i\n" ); scanf( "%d", &i ); switch( i ) { ... (5 Replies)
Discussion started by: gabam
5 Replies

4. Shell Programming and Scripting

problem with a loop

Hi What is wrong with this loop it was taken has a example in book!!! it returns then /usr/sbin/svcadm disable ppserv else /usr/sbin/ppadmin stop fi } (3 Replies)
Discussion started by: Ex-Capsa
3 Replies

5. UNIX for Advanced & Expert Users

loop problem

Hi guys my while do loop is not working properly; As soon as the load_date and run_date is same it should stop can somebody tell me where I am having the problem? In an oracle table I have LOAD_DT=5/1/2009 DATE datatype RUN_DT=5/5/2009 DATE datatype Now in a script with a spool file I get the... (15 Replies)
Discussion started by: henrysmith
15 Replies

6. Shell Programming and Scripting

if loop problem

osname=`uname` if || || ; then echo "hi" fi its saying bash: [: too many arguments why? anybody knows? (4 Replies)
Discussion started by: crackthehit007
4 Replies

7. Shell Programming and Scripting

problem with if loop

hi guys, i have a simple if loop as follows: if } -lt ${ARRAY}]; then echo "alert!!" fi when i run it, i get command not found error..i sat and stared at it for hours.. what is wrong with it? (3 Replies)
Discussion started by: npatwardhan
3 Replies

8. Shell Programming and Scripting

Loop problem

Hi, I faced a problem when I try to populate a database using the following script DECLARE a NUMBER := 1; b NUMBER := 91317010001; c NUMBER := 1; BEGIN WHILE a < 5001 LOOP insert into RGC_IMS_REGISTRATION (IMSRegId, Type, IMPI, IMPU, CP_ID, Location_For_Registration,... (1 Reply)
Discussion started by: sukumarm2008
1 Replies

9. Shell Programming and Scripting

loop problem

Got a problem with a loop that do this for each line: a=$(( cost + $( awk ' { print $2 } ' file) )) awk ' $2 ~ "^" && $2 > 0 {$2='$a';print} ' file #!/bin/sh cost=30 for, until, while? do "db update OD_LINK_COST something" done For troubleshoot the file looks like this 55 10 56 ... (1 Reply)
Discussion started by: maskot
1 Replies

10. Programming

problem with while loop

hi all, i have written the following code: while(proceed !='Y' && proceed!='N' && proceed!='y' && proceed!='n') { printf("\nPress \n\t 'Y' or 'y' to continue \n\t 'N' or 'n' to cancel:"); scanf("%c",&proceed); } the output i am gettin is: Press 'Y' to continue ... (1 Reply)
Discussion started by: mridula
1 Replies
Login or Register to Ask a Question