Skocz do zawartości

Skrypty - Problem


faja

Rekomendowane odpowiedzi

#!/bin/sh
num=0;
hostname=`hostname | cut -d'.' -f1`;
pkg_info | while read line
do
name=$(echo $line | cut -f 1 -d " ");
   pkg_info -L $name | grep / | grep -vE "(null)|///" | while read file
   do
       if [ -e $file ]; then
       else
           msg="Host: $hostname\npacket: $name \nFile: $file -  doesn't exits\n";
           num=$(($num+1);
       fi;
   done
done
echo "---"
echo $num
echo -e $msg

 

zmienna $msg (zawierajaca info o ostatnim pliku) nie zostaje wyswietlona

tak samo zmienna $num - zawierajaca info o ilosci brakujacych plikow

:(

help

Odnośnik do komentarza
Udostępnij na innych stronach

Niestety nie potrafie Ci pomóc, bo nawet nie wiem skąd się biorą warunki pętli read line, read file ;) (zmienna $file w read file'u siedzi?). Może w przypadku $msg trzeba ją zainicjować przed pętlą, żeby potem móc wywołać (chociaż nie wiem czy przy zmiennych typu string jest to wymagane). Ewentualnie dla kosmetyki można ifa poprawić:

if [! -e $file ]
then
msg="Host: $hostname\npacket: $name \nFile: $file -  doesn't exits\n";
num=$(($num+1);
fi

Odnośnik do komentarza
Udostępnij na innych stronach

Ok. Dzieki za pomoc. Zobaczymy, moze cos wykombinuje;)

___

a petla WHILE READ _zmienna_

to poprostu zapis do _zmiennej_ wartosci kazdego wersa po kolei az sie wersy nie skoncza

np. masz pliczek o nazwie plik1 o takiej zawartosci

"ALA

MA

KOTA

YO"

to mozna

cat plik1 | while read zmienna
do
echo $zmienna
done

to za kazdym razem do zmiennej $zmienna beda zapisywyane wersy, najpierw ALA, potem MA, potem KOTA, potem YO.

;)

______________________________

edit

 

a widzisz zonk lezy w tym WHILE READ

skrypt:

#!/bin/sh
num=0
while [ $num -le 2 ];
do
num=$(($num+1))
done
echo $num

wyswietla 3

ale

#!/bin/sh
num=0
cat test | while read wers # gdzie test ma 3 wersy
do
num=$(($num+1))
done
echo $num

wyswietla 0;/

Odnośnik do komentarza
Udostępnij na innych stronach

YEAH!!;]

http://wooledge.org:8000/BashFAQ#faq24

#!/bin/sh
num=0
cat test | 
( while read wers # gdzie test ma 3 wersy
do
num=$(($num+1))
done
echo $num )

wszystko o glupi potok chodzilo;p

pozdro

 

EDIT

no albo;] jesli te potoki tak bardzo przeszkadzaja;]

#!/bin/sh
num=0
a=`cat test`
for wers in $a 
do
num=$(($num+1))
done
echo $num

:D

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...