Przydatne przykłady i sztuczki

Przydatne przykłady i sztuczki

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
Przydatne przykłady i sztuczki

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
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