Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 4

Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 4

Kontynuując naszą serię na temat przydatnych wskazówek i wskazówek poleceń Bash, w dzisiejszym artykule zbadamy Greppping tylko to, czego potrzebujesz, i rozpocząć od podkładu PWD i jak odkryć ścieżkę, od której zaczął skrypt.

W tym samouczku 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 wskazówki dotyczące linii poleceń Bash - część 4

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: Directory robocze ścieżki? Albo nie?

Możemy być przyzwyczajeni do dzwonienia PWD w wierszu poleceń, aby powiedzieć nam nazwę naszego bieżącego katalogu:

$ PWD/Home/Roel/Workspace 

Ale jeśli chcemy uzyskać katalog, od którego rozpoczął się skrypt, użycie tej zmiennej ze skryptu również działa w ten sam sposób?

$ cat test_pwd.cii #!/bin/bash my_path1 = "$ pwd" echo "$ my_path1" my_path2 = "$ (pwd)" echo "$ my_path2" 
Kopiuj

Użyjemy dwóch sposobów na odzyskanie ścieżki: Poszukujemy (dla pierwszego My_path1 przypisanie) w PWD (Poziom systemu operacyjnego) Automatycznie zmienna-prezentowa i w drugim przypadku (dla drugiego My_path2 przypisanie) Wykonujemy PWD w subshellowie ($ (…)) i przypisz to do My_path2. Wykonajmy to samo:

$ ./test_pwd.SH/Home/Roel/Workspace/Home/Roel/Workspace 

Wygląda dobrze, prawda? Tak, być może, ale kiedy zmienimy się w inny katalog i wywołujemy skrypt za pomocą jego pełnej lub względnej nazwy ścieżki, PWD zmienna (lub PWD polecenie) Wewnątrz skryptu zwróci katalog, w którym byliśmy, kiedy rozpoczęto skrypt. Sprawdźmy to:

$ Mkdir Test $ CD Test $… /test_pwd.SH/Home/Roel/Workspace/Test/Home/Roel/Workspace/Test 

To, co możemy tutaj zobaczyć, to to PWD (albo $ Pwd zmienna) zawsze zwraca rzeczywistą bieżącą ścieżkę.

Może to być problem: możemy chcieć uruchomić indeks dolny lub uzyskać dostęp do pliku z tego samego katalogu (lub jego podwodnego), jak ten, w którym był skrypt. Często dzieje się tak w przypadku bardziej złożonych skryptów bash, które wywołują wiele dolnych indeksu i/lub plików danych i konfiguracji.

Więc jaki jest jednolity sposób na uzyskanie ścieżka, od której rozpoczął się skrypt?

Można rozważyć użycie dirname "\ $ 0" Komenda:

$ CAT TEST2.cii #!/bin/bash echo "\ $ 0" dirname "\ $ 0" 
Kopiuj

Dirname dostarczy - nazwa katalogu relatywnego dowolnej opcji przekazanej na nią, aw tym przypadku jest to \ 0 $ - Specjalna zmienna, która jest ustawiona, gdy skrypt zaczyna nazwa skryptu podczas uruchamiania. Przetestujmy to:

$ ./test2.cii ./test2.cii . $ CD Test $… /test2.sh… /test2.cii… 

Lepiej, jak sądzę, i może to trochę pomóc (przede wszystkim uzyskać pomysł), ale nadal nie daje nam w pełni wykwalifikowanej nazwy ścieżki. W tym celu możemy użyć opakowania podwójnego Dirname w połączeniu z faktyczną pełną wykwalifikowaną ścieżką uzyskaną z PWD wykonanie:

$ cat Make_IT_Work.cii #!/bin/bash my_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" echo "$ my_path" 
Kopiuj

Zobaczmy, czy to działa:

$ ./make_it_work.SH/Home/Roel/Workspace 

Jak dotąd tak dobrze, ale czy to działa, gdy uruchamiasz go z podkładu?

$ CD Test && pwd/home/roel/workspace/test $…/make_it_work.SH/HOME/Roel/Workspace $/home/roel/Workspace/Make_IT_Work.SH/Home/Roel/Workspace 

Tak!

Najpierw zmieniamy się w test i sprawdź, czy jesteśmy w test katalog, jeśli ten katalog zmian (płyta CD) Dowództwo zakończyło się sukcesem (zgodnie z instrukcją &&).

W obu przypadkach - czy jest to wywoływane w sposób względny (… /) lub z w pełni wykwalifikowaną nazwą ścieżki (/Home/Roel/Workspace/), W rezultacie widzimy katalog, od którego rozpoczął się skrypt (/Home/Roel/Workspace/), a nie rzeczywisty obecny katalog roboczy lub PWD (/Home/Roel/Workspace/Test).

Podsumowując, możesz użyć My_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" Skrypt jednolinowy w celu uzyskania prawidłowej, w pełni wykwalifikowanej nazwy katalogu z twoich skryptów. Po tym użycie względnego dodatku będzie dobrze działać. Na przykład możesz użyć $ My_path/include/mysubScript.cii i nawet $ My_path /… /one_dir_up_file.tekst itp.

Przykład 2: Greppping tylko to, czego potrzebujesz

Czy kiedykolwiek używałeś Grep? GREP to wszechstronne narzędzie wiersza poleceń Bash, które pozwala łatwo wybrać tekst z pliku. Przez większość czasu jest używany w następujący sposób:

$ CAT Test Linia 1 moja linia 2 linia linia 3 Nasza linia $ grep „linia 2” linia 2 twoje linie 


Mamy plik wejściowy z 3 wierszami i szukamy konkretnego testu (linia 2) W tym pliku. Ale co powiesz na to, że chcesz tylko linii, które mają wielokrotność linia (I.mi. linie) Wspomniany w nich? A co powiesz na to, że chciałbyś mieć tylko to słowo przed nim linie kawałek, ale nie rzeczywisty Linia x wyjście?

W takim przypadku możemy GREP tylko za to, czego potrzebujemy -o („tylko”) opcja do GREP:

$ grep -o „linie” linie testowe $ grep -o '\ w \+ linie „testuj swoje linie 

Bingo! Najpierw zgarnęliśmy tylko słowo „linie”, które zostało znalezione. Następnie poprzedziliśmy to przestrzenią i wyrażeniem regularnym, które stwierdza się w pseudo-teście: Znajdź granicę słów (\ w), przynajmniej raz i tyle razy, ile dotyczy (\+), a następnie przestrzeń. Rezultat jest taki twój (który ma dwa granice słów; początek i koniec). linia 2 nie jest zawarty. Chociaż ma granice słów, nie ma sufiks linie do tego.

Jeśli chcesz dowiedzieć się więcej o wyrażeniach regularnych w BASH, zobacz Bash Regexps dla początkujących z przykładami, zaawansowaną regex Bash z przykładami, a możesz również polubił wyrażenia regularne Python z przykładami z przykładami.

Wniosek

W tym artykule zbadaliśmy PWD i spojrzał na to, jak używać PWD z wewnątrz skryptu w połączeniu z Dirname Aby odzyskać w pełni wykwalifikowaną ścieżkę katalogu, od której rozpoczął się skrypt, w sposób, który zawsze będzie działał. Patrzyliśmy również na Greppping tylko to, czego potrzebujemy -o opcja i, w tym przypadku, wyrażenie regularne w celu dopasowania granic słów.

Zostaw nam komentarz z najlepszymi wskazówkami i wskazówkami dotyczącymi wiersza poleceń Bash!

  • 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 sztuczki
  • Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 2
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Zagnieżdżone pętle w skryptach Bash
  • Ubuntu 20.04 sztuczki i rzeczy, których możesz nie wiedzieć
  • Przydatne przykłady i sztuczki
  • Ubuntu 20.04 Przewodnik