Strona 2 z 2

: 13 maja 2012, 22:16
autor: DaVidoSS
Wykonaj w jakimś katalogu skrypt co jest na początku tematu a będziesz miał 100 pustych plików mp3. Wczytać się w ten sposób co podałeś do pętli for nie da.

: 14 maja 2012, 08:36
autor: larry2003
To może tak:

Kod: Zaznacz cały

#!/bin/bash

x=0

        until [[ $x = 100 ]]; do

                x=$((x + 1))

                        if [[ $x -le 9 ]]; then
                                touch 0"$x".\ omg\ .mp3
                                echo "$x jest jednym znakiem"
                        else

                                touch "$x".\ omg\ .mp3
                                echo "$x jest wyrazeniem wieloznakowym"

                        fi

        done

lista_plikow=`ls *.mp3|sort -n|sed -e 's/ //g'`
for items in ${lista_plikow
[*]}; do
       echo ${items}
done

exit 0


: 14 maja 2012, 18:37
autor: DaVidoSS
Tak nie. Wczytanie do pętli nazw nieistniejących plików w dalszym przetwarzaniu zaowocuje nieznalezieniem pliku.

Bardziej skłonny jestem użyć ostatecznie pętli ,,while'':

Kod: Zaznacz cały

ls  *.mp3 | sort -n  > lista

while read  LINE  ; do

    echo $LINE

done < lista

Z całą pewnością istnieje jednak sposób na wczytanie do pętli plików w kolejności bez tworzenia listy plików. W tym sęk, że nie wiem jak.
Problem polega na tym, że pętla ,,for'' wczytuje pliki pojedynczo, więc, nie ma jak ich w niej sortować.

Edycja:
Znalazłem nowość dla mnie - zmienna ,,IFS''.

Teraz to już gra i buczy:

Kod: Zaznacz cały

#!/bin/bash

x=0

        until [[ $x = 100 ]]; do

                x=$((x + 1))

                        if [[ $x -le 9 ]]; then
                                touch 0"$x".\ omg\ .mp3
                                echo "$x jest jednym znakiem"
                        else

                                touch "$x".\ omg\ .mp3
                                echo "$x jest wyrazeniem wieloznakowym"

                        fi

        done

echo ""


SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

        for FILE  in $(ls *.mp3 | sort -n) ; do

                echo "$FILE"

        done

IFS=$SAVEIFS

exit 0
Dziękuję serdecznie za polemikę w tym temacie.