Nowe posty

Autor Wątek: błąd expected integer ?  (Przeczytany 5261 razy)

users

  • Gość
błąd expected integer ?
« dnia: 2006-11-14, 17:20:18 »
Witam!

...
free=300000
potrzebne=`du -s`
echo "miejsce zajete to $potrzebne"

if [ "$free" -le "$potrzebne" ]
then
...

w miejsce echo wpisze ile jest zajetego z du -s ale jak ma porownac zmienna free z potrzebne to juz mi wypisze taki blad "integer expression expected". Tylko co jest nie tak? Ze zmiennej free czyta wartość ale z potrzebne juz coś ma problem ja porownac.

Pozdrawiam!

jk33

  • Gość
błąd expected integer ?
« Odpowiedź #1 dnia: 2006-11-14, 17:37:00 »
du wyświetla wyjście w formacie:
rozmiar1 nazwa1
rozmiar2 nazwa2
itd..

W tym przypadku dostajesz tylko jedną linię:
666 .
Jak widzisz pojawia się kropka - nazwa bieżącego katalogu.

o ile wyrażenie 666 jest liczbą, o tyle "666 ." już nie.


---
Uwaga: basz umożliwia znacznie szybsze porównywanie dwóch
liczb (bez odpalania dodatkowego programu - [ (test) ).
(składnia $(( )) )
Po dodatkowe informacje odsyłam do advanced bash scripting
guide i wyszukiwarek.


users

  • Gość
błąd expected integer ?
« Odpowiedź #2 dnia: 2006-11-15, 12:04:23 »
2006-11-14 17:37:00 jk33 napisał:

> du wyświetla wyjście w formacie:
 > rozmiar1 nazwa1
 > rozmiar2 nazwa2
 > itd..
 >
 > W tym przypadku dostajesz tylko jedną linię:
 > 666 .
 > Jak widzisz pojawia się kropka - nazwa bieżącego katalogu.
 >
 > o ile wyrażenie 666 jest liczbą, o tyle "666 ." już nie.
 

to jak można by to porównać bo po wyniku daje tą kropeczke np. 2022 . to juz wiem czemu mi taki błąd wyświetla ale jak się tego pozbyc żeby porównać te wartości, samo polecenie test też porównuje integer a jak polecenie du -s da mi wynik z kropeczką to jestem w tym samym punkcie co byłem.

gomath

  • Gość
błąd expected integer ?
« Odpowiedź #3 dnia: 2006-11-15, 15:33:32 »
Możesz spróbowac na przykład tak:

free=300000
potrzebne=`du -s | sed -e 's/(.*)s(.*)/1/'`
echo "miejsce zajete to $potrzebne"

if [ "$free" -le "$potrzebne" ]
then
...
fi

xavery

  • Gość
błąd expected integer ?
« Odpowiedź #4 dnia: 2006-11-15, 15:58:24 »
> potrzebne=`du -s | sed -e 's/(.*)s(.*)/1/'`

Osobiscie wole bardziej przejrzyste rozwiazania:)

potrzebne=`du -s | awk '{print $1}'`

users

  • Gość
błąd expected integer ?
« Odpowiedź #5 dnia: 2006-11-15, 17:24:59 »
2006-11-15 15:58:24 xavery napisał:

>  > potrzebne=`du -s | sed -e 's/(.*)s(.*)/1/'`
 >
 > Osobiscie wole bardziej przejrzyste rozwiazania:)
 >
 > potrzebne=`du -s | awk '{print $1}'`
 >
 właśnie o to mi chodziło, dzięki, a skąd wiadomo jaki print dawać np. print $1 albo $2 albo $3 albo $4? od czego to zależy?


gomath

  • Gość
błąd expected integer ?
« Odpowiedź #6 dnia: 2006-11-15, 20:10:36 »
>  właśnie o to mi chodziło, dzięki, a skąd wiadomo jaki print dawać np. print $1 albo $2 albo $3
 > albo $4? od czego to zależy?
 >
 >

W zmiennych $1, $2 itd trzymane są kolejne 'fragmenty' przekazanego do awk ciągu znaków (w $0 jest cały ciąg). Domyślnie fragmenty dzielone są białymi znakami. Gdybyś wpisał $2, otrzymałbyś kropkę. Można użyć innego separatora (man awk).