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

Autor Wątek: jak to działa  (Przeczytany 386 razy)

Offline augustcomye

  • Newbie
  • *
  • Wiadomości: 3
  • Reputacja: 0
jak to działa
« dnia: 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

Offline lesio

  • Hero Member
  • *****
  • Wiadomości: 588
  • Reputacja: 1
Odp: jak to działa
« Odpowiedź #1 dnia: 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 ( [ ... ] )

Offline augustcomye

  • Newbie
  • *
  • Wiadomości: 3
  • Reputacja: 0
Odp: jak to działa
« Odpowiedź #2 dnia: 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

Offline lesio

  • Hero Member
  • *****
  • Wiadomości: 588
  • Reputacja: 1
Odp: jak to działa
« Odpowiedź #3 dnia: 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...
« Ostatnia zmiana: Listopad 17, 2021, 10:59:59 pm wysłana przez lesio »