Linuxiarze.pl Forum

Społeczność => Pogaduchy => Wątek zaczęty przez: augustcomye w Listopad 16, 2021, 05:52:46 PM

Tytuł: jak to działa
Wiadomość wysłana przez: augustcomye w Listopad 16, 2021, 05:52:46 PM
Cześć, może mi ktoś wytłumaczyć o co w tym chodzi? O ile się nie mylę to jest to jakiś prosty skrypt.

#!/bin/zsh
if [ $# ­lt 1 ]
then
        echo "Poprawne wywolanie: $0 katalog1 katalog2 ..."
        exit 1
fi
n=0
while [ $1 ]
do
        if [ ­d $1 ]
        then
fullpath=$(readlink ­f $1)
echo $fullpath
n=$((n+1))
        else
             echo "$1 ­ nie jest katalogiem"
        fi
       
        shift
done
Tytuł: Odp: jak to działa
Wiadomość wysłana przez: lesio w Listopad 16, 2021, 07:33:36 PM
Skrypt realizuje polecenie "readlink" na argumentach wywołania tego skryptu (argumentami powinny być katalogi).
Najpierw jest sprawdzane, czy wystepuje chociaż jeden argument - jeśli nie to wyświetlany jest napis o prawidłowym sposobie wywołania skryptu.
Następnie w pętli wykonywane jest polecenie readlink na kolejnych argumenatch wywołania skryptu. Argumenty przesuwane są w lewo poleceniem "shift"
Co robi funkcja "readlink"? - polecam zapoznać się poleceniem "man readlink"
Moje uwagi:
1. użycie zmiennej n i jej inkremetacja wydają się zupełnie niepotrzebne, gdyż ta zmienna jest niewykorzytywana.
2. używanie w poleceniu "test" (czyli nawiasy kwadratowe) opcji bez myślnika (czyli np. "lt" zamiast "-lt") może być błędem, podobnie jak opcja "f" zamiast "-f" w komendzie "readlink"
3. W niektórych implementacjach shella (zsh) lepiej mogą zadziałać podwójne nawiasy kwadratowe ( [[ .... ]] ) zamiast pojedynczych ( [ ... ] )
Tytuł: Odp: jak to działa
Wiadomość wysłana przez: augustcomye w Listopad 17, 2021, 07:07:10 PM
Wielkie dzięki na początek. Udało mi się odpalić skrypt. w moim przypadku duży postęp ;D . Nie jestem pewny, czy dobrze zrobiłem, dodałem myślnik przed f i zmieniło kolor, ale w opisach działania funkcji readlink znalazłem że tak trzeba. Jeśli to nie problem, to mogę prosić o wskazówkę jak zrobić, żeby skrypt odczytał liczbę argumentów? Dochodzi do pierwszego wywołania echo i dalej nie liczy.

Skrypt wygląda teraz tak:

#!/bin/zsh
if [ $# -lt 1 ]
then
        echo "Poprawne wywolanie: $0 katalog1 katalog2 ..."
        exit 1
fi

while [ $1 ]
do
        if [ -d $1 ]
        then
fullpath=$(readlink -f $1)
echo $fullpath
n=$((n+1))
        else
             echo "$1 ­ nie jest katalogiem"
        fi
       
        shift
done
Tytuł: Odp: jak to działa
Wiadomość wysłana przez: lesio w Listopad 17, 2021, 10:56:25 PM
Bo zapewne nie podałeś żadnego argumentu, czyli nie podałeś nazwy katalogu (istniejącego lub też nieistniejącego). Echo pokazało Ci, jak powinno wyglądać poprawne wywołanie skryptu. Nadmieniam, że skrypt niczego nie liczy (tzn. formalnie rzecz biorąc liczy ilość orgumentów, ale jest to zupełnie zbędne i niewykorzystywane) - działa mniej więcej tak, jak to opisałem...