Witaj na Forum Linuxiarzy
Zanim zalogujesz się, by pisać na naszym forum, zapoznaj się z kilkoma zasadami savoir-vivre'u w dziale Administracja.
Wiadomości z problemami zamieszczone w wątku "Przywitaj się" oraz wszelkie reklamy na naszym forum będą usuwane.

jak to działa

Zaczęty przez augustcomye, Listopad 16, 2021, 05:52:46 PM

Poprzedni wątek - Następny wątek

augustcomye

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

lesio

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 ( [ ... ] )

augustcomye

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

lesio

#3
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...

Zobacz najnowsze wiadomości na forum