Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: Znaki specjalne w warunku  (Przeczytany 3159 razy)

Wolfia

  • Gość
Znaki specjalne w warunku
« dnia: 2012-05-02, 18:49:39 »
Hej wszystkim, przepraszam za być może lamerskie pytanie, ale jakoś nie mogę sobie z tym poradzić,  a w programowanie w języku powłoki dopiero się wdrażam.
Piszę mały skrypt, który jako jeden z argumentów ma przyjmować rozszerzenie pliku w postaci ".roz" (Ważne jest to, by podana była właśnie ta kropka z przodu). Chciałabym wprowadzić kontrolę błędów, która sprawdzałaby, czy argument podany został właśnie w takiej postaci. Próbowałam zrobić to za pomocą zwykłego ifa i znaków uogólnionych, jednak znaki uogólnione interpretowane są wtedy jako zwykłe znaki. Mógłby mi ktoś podpowiedzieć, w jaki sposób napisać tę kontrolę błędów?
Z góry dziękuję za wszystkie odpowiedzi.

chmooreck

  • Gość
Znaki specjalne w warunku
« Odpowiedź #1 dnia: 2012-05-02, 22:31:47 »
ja bym użył wyrażeń regularnych wbudowanych w bash'a

  • Gość
Znaki specjalne w warunku
« Odpowiedź #2 dnia: 2012-05-03, 10:16:12 »
Jeżeli nie chcesz użyć grepa, co jest najprostszym i najlepszym rozwiązaniem, to można tak:
case $input in *.[rR][oO][zZ] ) echo dobre rozszerzenie ;; esac

Wolfia

  • Gość
Znaki specjalne w warunku
« Odpowiedź #3 dnia: 2012-05-03, 12:25:10 »
Dziękuję za odpowiedzi:) wyrażeń regularnych używałam wcześniej w ifie, ale jak już wspomniałam, test interpretował mi je jako zwykłe znaki. Na użycie grepa nie wpadłam, dzięki raz jeszcze:)

Mam jednak jeszcze jeden z tym problem. Nie będę zakładać nowego tematu, więc zapytam tutaj - mam w skrypcie pętle, której zadaniem jest wyszukanie podanego wzorca w plikach. Używam do tego grepa, po czym wynik jego wyszukiwań wstawiam do zmiennej. Wszystko się wyszukuje, jednak gdy parę linijek niżej sprawdzam zawartość zmiennej w warunku - okazuje się, że jest pusta. Co robię źle?
Odchudziłam kod tak, żeby były w nim tylko te linie, które sprawiają problem.

for plik in $katalog/*"$roz";
do
pomocnik=`grep -n $wzorzec $plik`
#echo $pomocnik $plik
if [ $pomocnik ]
then
echo "sciezka do pliku: " $plik

else
echo "nie znaleziono"
fi
done
Z góry dziękuję za jakiekolwiek odpowiedzi.

chmooreck

  • Gość
Znaki specjalne w warunku
« Odpowiedź #4 dnia: 2012-05-03, 22:12:56 »
Cytat: Wolfia
wyrażeń regularnych używałam wcześniej w ifie, ale jak już wspomniałam, test interpretował mi je jako zwykłe znaki.
if [[ $1 =~ \\.*.roz ]]; then
  echo ok
fi
co do drugiego problemu: do zmiennej pomocnik wrzucasz wyjście grep'a, a nie wynik działania (czyli powodzenie lub nie)

  • Gość
Znaki specjalne w warunku
« Odpowiedź #5 dnia: 2012-05-03, 22:59:16 »
Przy czym kod podany przez chmoorecka będzie działał tylko w bash-u. Jeżeli ktoś używa innej powłoki (dash, zsh, ksh, csh, fish...) to mu nie zadziała.
Tzn. żebyśmy się dobrze zrozumieli -- w wykorzystywaniu bashyzmów i pisaniu nieprzenośnych skryptów nie ma nic złego. Tylko warto mieć świadomość, że są to bashyzmy i jakich niezależnych od używanej powłoki konstrukcji można użyć.

Co do sprawdzania warunku, rób po prostu:
if grep -q "$wzorzec" "$plik"; then
   echo znaleziono
else
   echo "nie znaleziono"
fi
Polecam tekst o popularnych błędach popełnianych podczas pisania skryptów powłoki oraz komentarze umieszczone pod nim. Znajdziesz tam również odnośniki do innych wartych uwagi artykułów.

Wolfia

  • Gość
Znaki specjalne w warunku
« Odpowiedź #6 dnia: 2012-05-04, 01:39:14 »
To by tłumaczyło, dlaczego takie konstrukcje, jak te podane przez chmoorecka mi nie działały poprawnie. Myślałam, że to ja źle próbuje to wykorzystać :D

Dzięki wielkie za pomoc :) artykuł bardzo ciekawy, na pewno się przyda.