Strona 1 z 1

Bash każdy rząd w innej zmiennej

: 24 sie 2011, 19:44
autor: xomrk
Witam

pisałem ostatnio skrypt podliczający ilość miejsca zużytego na dysku i miałem problem z takim czymś:

Jak miałem wynik polecenia np

rząd 1
rząd 2
rząd 3
rząd 4

to przy użyciu tail i head zrobiłem dla 4 zmiennych coś takiego

wolne1=`df -h | grep "/dev/sd" | cut --bytes=29-31 | head -n 1 `
wolne2=`df -h | grep "/dev/sd" | cut --bytes=29-31 | head -n 2 | tail -n 1 `
wolne3=`df -h | grep "/dev/sd" | cut --bytes=29-31 | tail -n 2 | head -n 1 `
wolne4=`df -h | grep "/dev/sd" | cut --bytes=29-31 | tail -n 1 `


lecz teraz chce napisać skrypt do konwertowania plików wideo i niestety nie mam zamiaru robić w ten sposób. Dodaje że ilośc plików czyli ( rządów ) nie będzie z góry ustawiona ( zależne od ls *.avi ).

Czy są jakieś prostsze sposoby aby każdy rząd umieścić w innej zmiennej ?

Re: Bash każdy rząd w innej zmiennej

: 24 sie 2011, 20:15
autor: Dwimenor
Czy koniecznie potrzebujesz każdy plik przypisywać do innej zmiennej? Nie możesz zrobić pętli?

Kod: Zaznacz cały

for plik in `ls *.avi`;do
operacje na $plik
done
Albo przypisać sobie wszystkie filmy do tablicy i odwoływać się do jej kolejnych elementów.

Kod: Zaznacz cały

tablica=(`ls *.avi`)
for plik in ${tablica[*]};do
operacje na $plik
done

Re: Bash każdy rząd w innej zmiennej

: 24 sie 2011, 21:21
autor: beluosus
@Dwimenor: Twoje rozwiązanie nie sprawdzi się dla plików ze spacjami. Naturalnym rozwiązaniem jest:

Kod: Zaznacz cały

for i in *.avi
do
    echo "$i" # przykładowa operacja
done
@xomrk: albo nie doczytałeś, albo niewiele wyniosłeś ze swojego ostatniego tematu, skoro nadal używasz "brzydkiego head-tail" nie wspominając o df-grep.

Re: Bash każdy rząd w innej zmiennej

: 25 sie 2011, 08:19
autor: Dwimenor
Fakt, spacje wszystko rozwalą.