Przydatne przykłady i sztuczki
- 2308
- 526
- Juliusz Janicki
Bash to zróżnicowany interfejs powłoki z wieloma opcjami programowania i bogatym językiem instruktażowym. Łatwo jest przegapić funkcje i dynamikę Bash, więc ta seria wprowadza wiele wskazówek, sztuczek, przykładów i gotchas, jeśli chodzi o używanie Bash. Pierwsze dwa artykuły z tej serii można znaleźć w naszym artykule przydatne wskazówki i sztuczki Bash Porady i sztuczki.
W tej serii samouczków się nauczysz:
- Przydatne wskazówki, sztuczki i metody
- Jak wchodzić w interakcje z wierszem poleceń bash w zaawansowany sposób
- Jak ogólnie wyostrzyć swoje umiejętności i stać się bardziej biegły użytkownik Bash
Zastosowane wymagania i konwencje oprogramowania
Kategoria | Wymagania, konwencje lub wersja oprogramowania |
---|---|
System | Niezależny od rozkładu Linuksa |
Oprogramowanie | Wiersz poleceń Bash, system oparty na Linuksie |
Inny | Wszelkie narzędzie, które nie jest zawarte w skorupce Bash domyślnie można zainstalować za pomocą za pomocą sudo apt-get instal instal narzędzie (Lub Mnij instalacja dla systemów opartych na Redhat) |
Konwencje | # - Wymaga wykonywania Linux -Commands z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda$-Wymaga wykonania Linux-commands jako zwykłego niepewnego użytkownika |
Przykład 1: Prawidłowe sprawdzanie istnienia plików i katalogów
Możemy dość łatwo sprawdzić obecność katalogu, używając -D
(Czy katalog o określonej nazwie istnieje) klauzula w Jeśli
oświadczenie:
$ MyPathTocheckForexistence = "$ pwd" $ echo "$ myPathTocheckForexistence"/home/roel/iamhappy $ if [-d $ myPathTocheckeckForexistence]; Wtedy Echo „istnieje!"; fi istnieje!
Jednak równie łatwo jest popełnić trudny do debugowania błąd w niektórych obszarach bash. Na przykład rozważmy (i zobaczmy, czy możesz znaleźć błąd);
$ MyPathTocheckForexistance = "/czynotReallyExist" $ if [-d $ myPathTocheckecforexistence]; Wtedy Echo „istnieje!"; fi istnieje! $ ls /czynotReallySist LS: nie można uzyskać dostępu do ' /czynotreallyExist': brak takiego pliku lub katalogu
Dlaczego Jeśli
sprawdź dojść do wniosku, że /czynotreallyestek
Katalog istnieje? Czy widzisz błąd?
Problem polega na tym, że w nazwie zmiennej jest literówka. Istnienie
vs ISTNIENIE
…
Być może trochę bezczelny, ale z całą powagą powinno to również łatwo wpaść na Gotcha:
$ if [-d]; Wtedy Echo „istnieje!"; fi istnieje!
I ważniejsze;
$ Var1 = "; if [-d $ var1]; następnie echo" istnieje!"; fi istnieje!
Tak więc, jeśli zapomniasz inicjowania zmiennej nazwy katalogu, którą następnie sprawdzasz, lub nazwa zmiennej zostanie błędna, wówczas wynik będzie taki, że Bash Jeśli
Oświadczenie zwraca, że katalog istnieje! Nie ma dalszych wspomnień o tym interesującym wyjątku w instrukcji (Ref Man Bash
), co tylko to wyjaśnia -D
Jest Prawda, jeśli plik istnieje i jest katalogiem..
Jak więc możemy to naprawić?
Przykład 2: Lepszy sposób sprawdzenia istnienia plików i katalogów
Poprawka jest łatwa; Możemy zacytować naszą zmienną z podwójnymi cytatami ("
), który następnie stworzy Jeśli
nie jest domyślne dla zawsze sprawnego wyniku. Jako interesująca uwaga uboczna do dalszej myśli i być może twój kompetentny komentarz poniżej tego samego efektu, należy się zastanawiać, dlaczego został wdrożony w ten sposób i jaka jest zawsze prawdziwa implementacja.
$ Var1 = "; if [-d" $ var1 "]; następnie echo" istnieje!"; fi $
Proste i eleganckie rozwiązanie. Zamiast tego Jeśli
oświadczenie jest teraz analizowane jako Jeśli [-d]
które, jak widzieliśmy, zawsze ocenia się w true, teraz jest przeanalizowane jako (pod warunkiem, że to Var1
jest przynajmniej pusty) Jeśli [-d ""]
co powoduje fałszywe, a zatem Następnie
klauzula nie jest wykonywana.
Przykład 3: kiedykolwiek chciałem wyodrębnić zawartość .plik Deb?
Czasami coś pęknie w systemie i możemy chcieć uzyskać pojedynczy plik z .Deb
pakiet. .Deb
Pakiety (pakiety instalacyjne w stylu debian, a także używane przez Ubuntu i Mint) można łatwo znaleźć online, ale nie zawsze jest to takie oczywiste, jak wyodrębnić z niego pliki. Aby to zrobić, możemy:
ar x some_deb_file.Dane Deb Tar -xf.smoła.xz
ar
jest narzędziem do Utwórz, modyfikuj i wyodrębnia z archiwów, Jako instrukcja (Człowiek ar
) wyjaśnia. Te polecenia dostarczą pliki wewnątrz .Deb
pakiet. Każdy .Deb
Plik będzie miał dwa pliki archiwum, a mianowicie kontrola.smoła.xz
I dane.smoła.xz
(wspólny standard) i - jak widać z przykładu - jest to dane.smoła.xz
archiwum, które należy rozwinąć, aby zobaczyć pliki w środku .Deb
pakiet.
Wniosek
W tym artykule zbadaliśmy sposoby prawidłowego sprawdzenia istnienia plików i katalogów za pomocą właściwego cytowania, i są przykładem, w jaki sposób łatwo popełniać błędy w tym obszarze. Zawsze testuj skrypty i wypróbuj różne sytuacje i scenariusze. Przyjrzeliśmy się również, w jaki sposób możemy wyodrębnić zawartość z .Deb
plik za pomocą ar
I smoła
polecenia. Jak zawsze, ciesz się kodowaniem bash i zostaw nam komentarz poniżej swoich ustaleń!
- Przydatne przykłady i sztuczki
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 2
- Przydatne przykłady i sztuczki
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 4
- Przydatne przykłady i sztuczki
Powiązane samouczki Linux:
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Mastering Bash Script Loops
- Przydatne przykłady i sztuczki
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 2
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 4
- Rzeczy do zainstalowania na Ubuntu 20.04
- Ubuntu 20.04 sztuczki i rzeczy, których możesz nie wiedzieć
- Zagnieżdżone pętle w skryptach Bash
- Ubuntu 20.04 Przewodnik
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- « Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 2
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 4 »