[LINUX] UNIX-Grundlagen (zweiter Teil)

Über diesen Artikel

Dies ist eine Zusammenfassung der Grundlagen von UNIX-basierten PCs. Wenn Sie diesen Artikel lesen und richtig verstehen, haben Sie ein gutes Verständnis von UNIX. Bitte klicken Sie auf den Link unten für den ersten Teil.

UNIX-Grundlagen (erster Teil) https://qiita.com/minnsou/items/6b6b74fcd79bd00ace1a

Umgebungseinstellung

So richten Sie die Umgebung ein

Die unter UNIX verwendeten Shells (sh, csh, bash usw.) können angepasst werden. Es gibt zwei Möglichkeiten, Befehle anzupassen.

  1. Methode durch Einstellen der Datei Eine Einstellungsdatei ist eine Datei, die die Einstellungen eines Befehls beschreibt. Im Allgemeinen liest ein Befehl, der eine Einstellungsdatei verwendet, beim Starten zuerst den Inhalt der Einstellungsdatei und ändert ihre Funktionsweise gemäß der Beschreibung. Verwenden Sie beispielsweise .profile für sh und .bash_profile oder .bashrc für bash. Dies hängt von der Shell ab.
  2. Methode nach Umgebungsvariable Umgebungsvariablen werden verwendet, indem Werte in den Variablen festgelegt werden. Wenn der Befehl aufgerufen wird, überprüft er den Wert der Umgebungsvariablen nach Bedarf und ändert sein Verhalten abhängig vom festgelegten Wert. Umgebungsvariablen werden normalerweise in der Einstellungsdatei festgelegt.

Interaktive Shell und nicht interaktive Shell

Es gibt zwei Arten des Shell-Starts: __interaktiv __ und __nicht interaktiv __. Interaktiv ist eine Form der Wiederholung von Aufgaben wie "Wenn ein Mensch eine Anfrage stellt, verarbeitet der Computer diese". Nicht interaktiv ist eine Form, in der alle Inhalte der Verarbeitung in einer Datei oder etwas im Voraus beschrieben werden und der Computer die Inhalte liest und verarbeitet. Beachten Sie, dass eine Konfigurationsdatei, die von einer nicht interaktiven Shell gelesen werden kann, z. B. die csh-Konfigurationsdatei ".cshrc", normalerweise zu einem Fehler beim Anzeigen einer Nachricht oder beim Konfigurieren des Terminals führt. Für csh müssen Sie die Shell-Variable "$ prompt" verwenden, um Fälle zu trennen.

Shell-Variablen und Umgebungsvariablen

Legen Sie in der Shell-Einstellungsdatei Shell-Variablen, Umgebungsvariablen, Aliase usw. fest. __ Shell-Variable __ ist eine für die Shell eindeutige Variable. Einige dieser Variablen haben eine besondere Bedeutung, und Sie können das Verhalten der Shell ändern, indem Sie solche Variablen festlegen. Die Umgebungsvariable __ ist eine Variable, die allen unter UNIX verwendeten Prozessen gehört, nicht der Shell. Wenn aus einem Prozess ein anderer Prozess erstellt wird, erbt der neu erstellte Prozess die im ursprünglichen Prozess festgelegten Umgebungsvariablen unverändert.

Die Shell- und Umgebungsvariablen lauten: "Umgebungsvariablen werden an untergeordnete Prozesse übergeben, Shell-Variablen werden jedoch nicht übergeben (Umgebungsvariablen werden vom Kernel verwaltet. Wenn also ein untergeordneter Prozess erzeugt wird, wird ein Befehl von der Shell aufgerufen." Zu diesem Zeitpunkt kann der Kernel eine Kopie der Umgebungsvariablen der Shell an den untergeordneten Prozess übergeben, die Shell-Variablen werden jedoch von der Shell verwaltet, sodass __ der Kernel __) nicht erkennt. Wenn die Shell-Variable und die Umgebungsvariable verwechselt werden, sollten Sie sich daran erinnern, __ "Die Shell-Variable wird verwendet, um das Verhalten der Shell selbst festzulegen, und die Umgebungsvariable wird verwendet, um das Verhalten des Befehls festzulegen, den die Shell startet" __ ..

Shell-Variablen werden mit variable = value für sh, bash und zsh gesetzt. Setzen Sie keine Leerzeichen an beide Enden von =. Ein Beispiel für eine Shell-Variable ist

--Prompt ("PS1" ist "$", "PS2" ist ">", "PS4" ist "#" ist die Grundeinstellung. Beachten Sie, dass die Standardeinstellung von "PS1" auf dem Mac "\ h: \ W \ u " ist In $ ist \ hder Hostname,\ W der aktuelle Verzeichnisname und \ u` der Benutzername.)

und so weiter.

Beispiele für Umgebungsvariablen sind PATH, TERM, HOME, USER, SHELL usw. (Bash kann nicht niedriger sein), die im Allgemeinen höher sind. Sie können sie alle mit "echo $ PATH" sehen. Wenn Sie die Shell-Variable a verwenden möchten, die Sie als Umgebungsvariable definiert haben, verwenden Sie "export a". Umgebungsvariablen wie diese verschwinden jedoch auch, wenn Sie sich von der Shell abmelden. Wenn Sie sie also dauerhaft behalten möchten, müssen Sie sie in ".bashrc" usw. schreiben.

Sie können alle Umgebungsvariablen mit den Befehlen "printenv" und "export" anzeigen und die Erläuterungen zu den typischen Umgebungsvariablen anzeigen, die im System mit "man environ" verwendet werden. Der Befehl declare (aber Sie können auch die definierten Funktionen sehen) sieht alle Shell-Variablen.

alias

Fähigkeit, Befehle mit Aliasnamen zu versehen. Mit dieser Funktion können Sie Folgendes tun.

  1. Reduzieren Sie den Schreibaufwand (z. B. "alias md = mkdir").
  2. Erstellen Sie einen neuen Befehl (z. B. einen eigenen Befehl erstellen).
  3. Tippfehler antizipieren (z. B. "alias mroe = more")
  4. Ändern Sie die Bedeutung des Befehls (z. B. "alias ls =" ls -F ").
  5. Führen Sie Dinge aus, die Shell-Skripte nicht ausführen können (das Festlegen von Shell- und Umgebungsvariablen für die aktuell verwendete Shell ist in Shell-Skripten bedeutungslos, da durch Ausführen dieses Shell-Skripts eine andere Shell gestartet wird).

Terminaleinstellungen

Terminaleinstellungen sind auch eines der Elemente, die in der Shell-Einstellungsdatei festgelegt sind. Der wichtigste Befehl zum Konfigurieren des Terminals ist der Befehl stty. Mit dem Befehl stty können Sie die Terminalzuweisungstaste und den Ausgabemodus einstellen. Zum Beispiel ändert der Befehl "stty erase ^ H" die Taste, um ein Zeichen in "Strg-H" zu löschen. Das Folgende ist eine Liste häufig verwendeter Schlüssel, die mit stty geändert werden können.

Funktion Standardschlüssel Bedeutung
erase ^? (Del) Löschen Sie ein Zeichen
kill ^U Löschen Sie eine Zeile
werase ^W Löschen Sie ein Wort
susp ^Z aussetzen(Jobkontrolle)
intr ^C Stoppen Sie die Ausführung
eof ^D Ende der Datei(Melden Sie sich für Shell ab)

Regulärer Ausdruck (unter UNIX)

Ein regulärer Ausdruck ist eine der Möglichkeiten, eine Reihe von Zeichenfolgen basierend auf einer bestimmten Regel darzustellen. Beachten Sie, dass die in diesem Artikel in Zukunft verwendeten regulären Ausdrücke die unter UNIX verwendeten sind und sich geringfügig von denen unterscheiden, die in der Automatentheorie und der Sprachtheorie verwendet werden.

Zum Beispiel steht in der Zeichenfolge "^ a. * Ttion " am Anfang der Zeile ein "(" ^ "), und es gibt 0 oder mehr Wiederholungen (" * ") eines Zeichens (". "). , Tion gefolgt vom Zeilenende (``) ". Zeichen mit speziellen Bedeutungen wie "^" und "*" heißen metacharacter.

Es gibt mehr als eine Art von regulären Ausdrücken, und die vom Tool realisierten Funktionen sind begrenzt, und die Ausdrucksmethode unterscheidet sich geringfügig. Hier werde ich es in zwei Teilen vorstellen.

  1. Reguläre Ausdrücke der Serien "grep", "ed", "vi", "sed", "less"
  2. reguläre Ausdrücke der Familie "egrep" und "awk"

Darüber hinaus sollte beachtet werden__Ersetzen des Shell-Dateinamens__Benutzt in*(Beliebige Zeichenfolge)Oder?(Beliebiges Zeichen)Beachten Sie, dass sich die Bedeutung des Symbols geringfügig von der von Metazeichen wie z.ps | grep *tionWenn Sie einen Befehl wie eingeben*Bei der Muschel__Der Dateiname wird zuerst ersetzt__。ps | grep '*.tion'mögen''Muss in beigefügt sein.

1. Reguläre Ausdrücke der Serien "grep", "ed", "vi", "less"

--Entfernen Sie die Bedeutung des Metazeichens "\ m" --^Zeilenanfang

Zum Beispiel

--a * c entspricht " c "," ac", " aac "usw. -- \ ([ab] c \) \ 1 entspricht " acac "oder" bcbc". Wenn "\ ([ab] c \)" mit " ac "übereinstimmt, steht" \ 1" für " ac ", daher stimmt es nicht mit" acbc" überein.

2. reguläre Ausdrücke der Familie "egrep" und "awk"

Es ist im Grunde dasselbe wie der obige reguläre Ausdruck, aber das in der Sprachtheorie definierte reguläre Ausdrucksformat kann jetzt verwendet werden.

Zum Beispiel

--ab + c entspricht " abc "," abbc", " abbbc "usw. -- (a | b) c entspricht " ac "oder" bc"

Suchen und Ersetzen

Suche

Verwenden Sie grundsätzlich vi oder emacs search oder grep, um nach Wörtern in __file zu suchen, und verwenden Sie den Befehl find, um nach __file name __ zu suchen.

In vi wird im Befehlsmodus / keyword für die Vorwärtssuche und? Keyword für die Rückwärtssuche verwendet. emacs verwendet das Schlüsselwort "Strg-S", um vorwärts zu suchen, und das Schlüsselwort "Strg-R", um rückwärts zu suchen.

grep, egrep und fgrep sind Befehle, die bestimmte Daten empfangen, die mit der angegebenen Zeichenfolge übereinstimmende Zeile daraus extrahieren und ausgeben. Die Grundform ist "grep keyword files", und wenn der Dateiname "files" nicht angegeben ist, werden Daten von der Standardeingabe eingegeben. grep ist das älteste in der sogenannten" grep family ". egrep ist im Grunde grep, aber die regulären Ausdrücke, die behandelt werden können, wurden erweitert. fgrep kann mehrere Zeichenfolgen gleichzeitig durchsuchen, jedoch keine regulären Ausdrücke verwenden.

Der Befehl find sucht nach der Datei selbst. Die Standardverwendung des Befehls find lautet wie folgt.

Verzeichnissuchkriterien finden

Zum Beispiel bedeutet "find. -Name" * .py ", alle Dateien im aktuellen Arbeitsverzeichnis zu durchsuchen, die mit" .py "enden. Sie können auch find. -Name '* .py' -atime + 15 verwenden, um nach Dateien zu suchen, auf die seit mehr als 16 Tagen nicht mehr zugegriffen wurde. -atime repräsentiert die letzte Zugriffszeit (Zugriffszeit).

Ein praktischeres Beispiel ist find. -Name '* ~' -exec rm {} \; -print. Hiermit löschen Sie den Dateinamen, der mit "~" ("rm {}") endet, und drucken ihn ("-print"). Die Option -exec führt UNIX-Befehle bis zum maskierten Semikolon (\;) aus, und {} enthält den Pfadnamen, der die Bedingungen erfüllt.

Ersatz

Das Ersetzen durch "vi" entspricht der Ersetzungsfunktion des Befehls "ex", der eine andere Seite von "vi" ist. ed und sed verwenden ähnliche Ersetzungsbefehle. Grundsätzlich hat es das folgende Format und ersetzt die Zeichenkette, die mit pattern übereinstimmt, durch string.

range s/pattern/string/g

Geben Sie den Ersatzbereich für "Bereich" an. Zum Beispiel steht "%" für die gesamte Zeile und "Start, Ende" für die Zeile von "Start" bis "Ende". Reguläre Ausdrücke können für "Muster" und "Zeichenfolge" verwendet werden. Das letzte "/ g" bedeutet, alle Ersatzteile in einer Zeile zu wechseln. Die Details hier werden in der Einführung des Befehls sed ausführlich behandelt. Sie können Emacs durch "M-%" ("M-x query-replace") ersetzen.

Filter

Filter ist ein Programm, das die Dateneingabe von der Standardeingabe verarbeitet und das Ergebnis an die Standardeingabe ausgibt. Es gibt ungefähr zwei Typen: Der erste besteht darin, dass Sie die Filterfunktion angeben können, indem Sie dem Filter selbst ein Programm geben ("sed", "awk", "perl" usw.), und der zweite darin, dass die Funktion von Anfang an festgelegt wird. Dinge ("Kopf", "Schwanz" usw.).

Filterbeispiel

Verwenden Sie die Befehle head und tail, um einen Filter mit neuen Funktionen als Beispiel zu erstellen. Verwenden Sie "Bauch n m" als Filter, um die Linien n bis m zu extrahieren. Der Inhalt des Bauches ist wie folgt.

.sh


#!/bin/bash
from=$1
to=$2
arg=$(($to - $from + 1))
head -$to | tail -$arg

Jetzt können Sie die Zeilen 12-14 von foo.txt mit dem Befehl cat -n foo.txt | ./belly 12 14 abrufen.

tee Befehl

Ein Filter, der Eingaben von der Standardeingabe sowohl in die als Argument angegebene Datei als auch in die Standardausgabe ausgibt. Wenn Sie beispielsweise make | tee bar.txt ausführen, können Sie das Ergebnis des Befehls make in bar.txt und auch auf dem Bildschirm ausgeben.

Befehl sort

Ein Filter, der die Eingabe von der Standardeingabe zeilenweise sortiert und an die Standardausgabe ausgibt. Zum Beispiel wird mit ls -l | sort -nr + 4 das 4. Feld (Dateigröße) als numerischer Wert verglichen und in absteigender Reihenfolge angeordnet. -n wird als Zahl verglichen, -r wird in umgekehrter Reihenfolge wie angegeben angezeigt und -f unterscheidet nicht zwischen Groß- und Kleinschreibung.

Befehl uniq

Ein Filter, der doppelte Zeilen berücksichtigt, wenn benachbarte Eingabezeilen von der Standardeingabe denselben Inhalt haben, die doppelten Zeilen entfernt und in die Standardausgabe ausgibt. Angenommen, Sie haben die Dateien aa, bb und cc im ALTEN Verzeichnis und die Dateien aa1, bb und cc im NEUEN Verzeichnis. (ls OLD; ls NEW) | sort

aa
aa1
bb
bb
cc
cc

Wird angezeigt, aber(ls OLD; ls NEW) | sort | uniqDann

aa
aa1
bb
cc

Wird angezeigt. Das bb und cc, das ich trage, verschwinden.

Befehl tr

Ein Filter, der die Eingabe von der Standardeingabe in Zeicheneinheiten ersetzt und an die Standardausgabe ausgibt. Verwenden Sie in der Form tr old-string new-string und ersetzen Sie die Zeichen, die in old-string erscheinen, durch die Zeichen, die new-string entsprechen. Ersetzen Sie für "tr ab XY" a durch X und b durch Y. Wenn es "tr a-z A-Z" ist, werden alle Alphabete durch Großbuchstaben ersetzt und angezeigt. Zum Beispiel zeigt ls | tr a-z A-Z die Dateinamen in Großbuchstaben an. Wenn Sie die Option "-d" angeben, wird dies zu einem Filter, der das angegebene Zeichen löscht. Wenn Sie also "cat file | tr -d" \ 015 "verwenden, können Sie die CR des Steuerzeichens löschen (Windows ist das Ende der Zeile). Ist CR LF und UNIX ist nur LF, so behebt der obige Befehl die Zeilenumbrüche.

Befehl expand

Ein Filter, der die Registerkarten der Eingabe von der Standardeingabe in eine entsprechende Anzahl von Leerzeichen konvertiert und in die Standardausgabe ausgibt. nicht erweitern ist ein Filter, der aufeinanderfolgende Leerzeichen durch Tabulatoren ersetzt.

Befehl fold

Ein Filter, der die Eingabe von der Standardeingabe an die Standardausgabe ausgibt, nachdem die Zeile gewaltsam unterbrochen wurde, sodass die Länge jeder Zeile zu einer festen Anzahl von Zeichen wird. Verwenden Sie beispielsweise den Befehl expand file | fold -65, um die Zeilenbreite auf 65 Zeichen festzulegen. Der Befehl fold interpretiert keine Registerkarten, also verarbeiten Sie expand wie in diesem Beispiel vor.

Befehl pr

Ein Filter, der die Eingabe von der Standardeingabe in das Ausgabeformat für Zeilendrucker konvertiert und in die Standardausgabe ausgibt. Insbesondere ist es möglich, den Dateinamen, die Uhrzeit und die Seitenzahl als Kopfzeile jeder Seitenzahl hinzuzufügen und den Text mehrspaltig zu gestalten.

Befehl sed

sed (Stream-Editor) ist ein Editor, der als Filter verwendet werden soll. Die Grundform ist "sed command". command steht für" welche Art von Funktion auf die Zeile angewendet wird, die mit welcher Adresse übereinstimmt ". Das Format ist "[Adresse1 [, Adresse2]] Funktion". Wenn eine Adresse angegeben ist, wird die Funktion nur auf diese Zeile angewendet. Wenn zwei Adressen angegeben werden, wird die Funktion auf alle Zeilen zwischen den beiden Adressen angewendet. Wenn keine Adresse angegeben wird, wird die Funktionsfunktion auf alle Zeilen angewendet.

Es gibt verschiedene Möglichkeiten, die Adresse anzugeben. Sie können Zahlen verwenden, um die Anzahl der Zeilen darzustellen, und Sie können auch reguläre Ausdrücke verwenden. Wenden Sie beispielsweise für "10p" die p-Funktion in der 10. Zeile an. Wenden Sie für / ^ a /, / ^ b / p die Funktion p von der mit a beginnenden Zeile auf die mit b beginnende Zeile an.

Folgendes für jede Funktion.

Andere Ergebnisse wie Verzweigung und Zwischenlagerung können erhalten werden, Details werden jedoch weggelassen.

Befehl awk (Eiche)

awk ist eine Sprache zum Verarbeiten von Eingabezeilen gemäß Mustern. Ich bin gut darin, Dateien im tabellenartigen Format zu verarbeiten, wobei jede Eingabezeile durch Trennzeichen wie Leerzeichen und Tabulatoren getrennt ist. Etwas näher an c. Um awk auszuführen, können Sie program als Argument von awk program angeben oder das Programm als awk -f program-file in die Datei program-file schreiben und in -f schreiben. Es gibt eine Methode, um es als Option anzugeben. Der Inhalt von "Programm" ist

pattern1 { action1 }
pattern2 { action2 }
...

Das Muster pattern__ für input und die Aktion action, die ausgeführt werden soll, wenn das Muster übereinstimmt, werden als Paar beschrieben. Wenn "Muster" weggelassen wird, wird die Aktion "Aktion" auf allen Eingabezeilen ausgeführt. Wenn {action} weggelassen wird, wird das Zeilenvergleichsmuster ausgegeben.

Geben Sie das Muster für reguläre Ausdrücke an, indem Sie es in / einschließen. awk '/ ^ From: /' gibt alle Zeilen aus, die mit From: beginnen. Wenn Sie das awk-Programm in der Befehlszeile angeben, müssen Sie es in'_ einschließen, damit das an __awk angegebene Programm ein Argument ist. awk teilt die Eingabezeile automatisch durch Trennzeichen in Felder auf. Zum Beispiel ist "ls -l" der Modus in "$ 1" (wie "-rw-r - r -"), "$ 2" ist die Anzahl der festen Links, "$ 3" ist der Name des Besitzers und "$ 4" Geben Sie den Gruppennamen "$ 5" ein, z. B. die Größe der Datei (in der Reihenfolge, in der "ls -l" angezeigt wird).

Beispiel: ls -l | awk '$ 5> 1000 {print" Dateigröße ", $ 9," is ", $ 5;}'

size of file filename1 is 34694
size of file filename2 is 1011
size of file filename3 is 56203

Es werden nur Dateien mit einer Dateigröße größer als 1000 angezeigt. Zusätzlich zu "print" können Sie auch Variablenzuweisungen und -operationen sowie Steueranweisungen wie "if" und "for in action" einfügen, Details werden jedoch weggelassen.

Komprimierung und Archivierung

Kompression

Auf dem Gebiet der Informatik wurde lange Zeit ein Mechanismus in Betracht gezogen, um die Menge (Datenmenge) von Informationen zu reduzieren, die in irgendeiner Form ausgedrückt werden, ohne ihren Inhalt zu verlieren. Ein solcher Mechanismus wird als Datenkomprimierung oder einfach als Komprimierung bezeichnet. Das Wiederherstellen einer komprimierten Datei heißt decompression.

Der Befehl "compress" hat keine so hohe Komprimierung, ist jedoch nicht langsam und bei den meisten UNIX-Systemen Standard. Wenn es komprimiert ist, hat es eine Erweiterung von .Z. Verwenden Sie den Befehl "Dekomprimieren" zur Dekomprimierung. Der Befehl gzip hat die Erweiterung .gz. Dies ist eine Art GNU-Software. Verwenden Sie den Befehl gunzip, um eine mit dem Befehl gzip komprimierte Datei zu dekomprimieren. Wenn Sie den Befehl "zcat" verwenden, können Sie möglicherweise sowohl die mit dem Befehl "compress" komprimierte Datei als auch die mit dem Befehl "gzip" komprimierte Datei dekomprimieren. Es gibt auch einen Komprimierungsbefehl namens "bzip2". Verwenden Sie den Befehl bunzip2 zur Dekomprimierung.

Archiv

Das Kombinieren mehrerer Dateien zu einer Datei heißt __archive __. Zu den Archivierungsbefehlen gehören "tar", "shar", "cpio", "zip".

tar ist eine Abkürzung für tape archive, was ursprünglich ein Befehl zum Erstellen einer Archivdatei auf Magnetband war. Das Medium, das verwendet werden kann, ist jedoch nicht auf Magnetbänder beschränkt. Dieser Befehl wird in der Form tar key filename ... verwendet. Der Schlüssel enthält nur eines der fünf Befehlszeichen "c", "t", "x", "r" und "u" sowie Optionen, falls erforderlich.

-- c erstellt eine TAR-Datei --t untersucht den Inhalt der TAR-Datei --x ruft die Datei aus der TAR-Datei ab --r und u fügen Dateien am Ende der TAR-Datei hinzu

Häufig verwendete Optionen sind wie folgt.

Die Option in tar wird jedoch angegeben, indem sie mit dem Befehlszeichen und anderen Optionen verbunden wird, ohne das Zeichen " - "hinzuzufügen. Beispielsweise erstellt "tar cvf srcfiles.tar. / Src" eine TAR-Datei mit dem Namen "scrfiles.tar" basierend auf ./src.

Es gibt auch GNU tar, das den ursprünglichen Befehl tar erweitert. Manchmal hat es den Befehlsnamen "gtar" und manchmal den Befehlsnamen "tar". Es gibt viele andere Befehle wie "shar", "cpio" und "zip", aber sie werden hier weggelassen.

Tageszeiten

Kennen Sie die aktuelle Zeit

Verwenden Sie den Befehl date, um die Uhrzeit anzuzeigen. Stellen Sie mit der Option "-u" die Greenwich-Standardzeit ein.

Kalender anzeigen

Der Befehl cal, um den Kalender anzuzeigen. Zum Beispiel können Sie den Kalender für November 2019 unter "cal 11 2019" sehen. Beachten Sie, dass nur ein Argument als Jahr interpretiert wird.

Verwenden Sie den Wecker

Der Befehl "verlassen" kann als Wecker verwendet werden. Wenn Sie "Urlaub 1920" einstellen, wird der Alarm um 19:20 Uhr eingestellt und eine Meldung mit einem Piepton angezeigt. Es gibt auch eine Möglichkeit, "Urlaub + 30" anzugeben (eine Nachricht wird nach 30 Minuten gesendet), und es ist auch möglich, einen Alarm mit einer relativen Zeit ab der Gegenwart einzustellen. Verwenden Sie den Befehl kill, wenn Sie ihn nicht benötigen.

Nehmen Sie sich eine Pause

Der Befehl "sleep" ist buchstäblich ein Befehl, sich auszuruhen, ohne etwas zu tun. Ein Befehl, der für die im Argument angegebene Anzahl von Sekunden ruht und beendet wird, ohne etwas zu tun. Wenn Sie beispielsweise den Befehl sleep 300; echo" Tea is just ready "& ausführen, wird der Befehl echo nach 5 Minuten ausgeführt und eine Meldung angezeigt.

Führen Sie den Befehl zum angegebenen Zeitpunkt aus

Es gibt einen "at" -Befehl als eine der Methoden, um den Befehl zum Zeitpunkt Ihrer Entscheidung auszuführen. Dadurch wird das angegebene Shell-Skript zum angegebenen Zeitpunkt ausgeführt. Geben Sie im Format at time [Dateiname] die Zeit für den Start und den Namen des Shell-Skripts ein, das im Dateinamen ausgeführt werden soll. Wenn kein Dateiname angegeben wird, wird das Shell-Skript aus der Standardeingabe gelesen und ausgeführt. Zum Beispiel wird der Befehl "um 6 Uhr 6 Skript" das Skript am 6. Juni um 6 Uhr morgens ausführen. Dieser Befehl verwendet jedoch standardmäßig sh. Die Standardausgabe und die Standardfehlerausgabe dieses Skripts stammen von mail. Wenn es Ihnen nicht gefällt, führen Sie eine Umleitung durch (> result.out usw.).

Der Status des Shell-Skripts, das mit dem Befehl "at" ausgeführt werden soll, kann mit dem Befehl "atq" ermittelt werden. Verwenden Sie den Befehl atrm, um die Ausführung des durch den Befehl at angegebenen Shell-Skripts abzubrechen.

Arbeiten Sie regelmäßig

UNIX verfügt über einen Mechanismus zum regelmäßigen Starten von Befehlen. Mit diesem Mechanismus ist es möglich, unnötige Dateien jeden Tag automatisch zu löschen. Dieser Mechanismus wird von einem Daemon namens cron realisiert. Die Datei, in der die regelmäßig ausgeführten Befehle festgelegt sind, wird als crontab-Datei bezeichnet. Der cron-Daemon verweist auf den Inhalt der crontab-Datei und führt regelmäßig Befehle aus.

Verwenden Sie den Befehl crontab, um die crontab-Datei zu konfigurieren. Verwenden Sie crontab -e, um eine neue crontab-Datei zu erstellen oder deren Inhalt zu ändern. Dadurch wird der Editor gestartet und die Crontab-Datei des Benutzers geladen.

Schreiben Sie in die Crontab-Datei eine Einstellung pro Zeile. In der von allgemeinen Benutzern verwendeten crontab-Datei besteht jede Zeile aus den folgenden sechs durch Leerzeichen getrennten Elementen.

min hour day mon day-of-week command

Die ersten vier sind die Angabe von Minuten (min), Stunden (Stunden), Tagen (Tag) und Monaten (Mo). Wochentag gibt den Tag an, 0 ist Sonntag, 1 ist Montag und so weiter.

Zum Beispiel

0 0 1 1 * find $HOME -name '*core' -atime +7 exec rm {} \;

Am 1. Januar um 0:00 Uhr wird der Befehl find $ HOME -name '* core' -atime +7 exec rm {} \; ausgeführt. Wenn Sie in den ersten fünf Feldern, in denen ein Befehl angegeben ist, anstelle einer Nummer "*" angeben, wird der Befehl unabhängig von der Nummer in diesem Feld ausgeführt. Mit der Option -l ausführen, um den Inhalt der crontab-Datei anzuzeigen. Verwenden Sie zum Löschen der Crontab-Datei crontab -r.

Messen Sie die Befehlsausführungszeit

Verwenden Sie den Befehl time, um die Ausführungszeit eines Befehls zu messen. Das Format des Zeitbefehls.

Bash-Programmierung

Shell-Skript

Eine Datei, in der Befehle im Voraus gespeichert werden, damit sie in einem Stapel ausgeführt werden können, heißt shell script. Es ist etwas altmodisch, wird aber auch batch genannt, da die Verarbeitungsmethode vor Beginn der Ausführung festgelegt wird. Es wird auch als shell-Programm bezeichnet, da der Prozess für einen bestimmten Zweck organisiert ist.

Es ist mühsam, jedes Mal, wenn Sie ein Shell-Skript ausführen, "bash script_name" einzugeben. Wenn Sie also "#! / Bin / bash" am Anfang der Datei einfügen, können Sie es als Befehl ausführen. Sie können dies also einfach tun, indem Sie . / File_name eingeben (aber Sie müssen den Dateimodus ausführbar machen, wie chmod + x file_name). Ein Shell-Skript, das auf diese Weise als Befehl ausgeführt werden kann, heißt __shell-Befehl __.

Verhalten beim Ausführen von Shell-Befehlen

Wenn bash herausfindet, dass der Befehlsname "Dateiname" lautet, sucht es zunächst über den Befehlssuchpfad nach dieser Datei (wenn es sich jedoch um ". / Dateiname" handelt, wird nicht über den Pfad gesucht, da der Pfad bereits angegeben wurde). Wenn sich die Datei im ausführbaren Modus befindet, sehen Sie sich die erste Zeile der Datei an.

  1. Wenn der Zeilenanfang "#!" Ist, wird der Kernel aufgefordert, die Datei auszuführen. Dann wird die durch den absoluten Pfadnamen nach #! Angegebene Datei als Programm gestartet. Zum Beispiel #! / Bin / csh oder #! / Usr / bin / python. Die Textdatei wird als Eingabe verwendet. Alles, was nach dem absoluten Pfad geschrieben wird, wird als Argument betrachtet.
  2. Starten Sie andernfalls "bash" und verwenden Sie den Rest der Textdatei als Eingabe

Beachten Sie, dass sich die Behandlung von # nicht interaktiv von der interaktiven Verwendung der Shell unterscheidet. Beachten Sie, dass bei Verwendung von "#" in einem Shell-Skript dieses als "Kommentar" erkannt wird. Wenn Sie beispielsweise "rm important #" über die Befehlszeile ausführen und mit einem Shell-Skript ausführen, sind die Dateien, die verschwinden, unterschiedlich. Wenn Sie "wichtige #" in einem Shell-Skript löschen möchten, maskieren Sie es wie "wichtige ".

Wenn bash gestartet wird, sind das aktuelle Arbeitsverzeichnis der zu startenden bash und das aktuell zu startende Arbeitsverzeichnis __matched __. Sie können auch relative Pfade verwenden, um Shell-Befehle auszuführen.

Variable Details

In Bash können Variablen auch array verwenden. Deklarieren Sie beispielsweise das Array "names = (hatter duchess alice)". Sie können den Wert jetzt als "echo $ {names [0]}" bezeichnen.

Wenn Sie ein Shell-Skript schreiben, möchten Sie manchmal den Standardwert verwenden, wenn eine Variable nicht definiert ist, oder die Verarbeitung entsprechend der Anzahl der Arrays durchführen. Zu diesem Zweck bietet bash eine Möglichkeit, herauszufinden, ob eine Variable definiert ist oder wie viele Arrays vorhanden sind. Die grundlegenden sind unten aufgeführt.

Bezeichnung Bedeutung
${variable} Wert der Variablen Variable (Wert der Variablen)$Wenn Sie den Buchstaben z unmittelbar nach a hinzufügen möchten, wird diese Notation nicht als Variable interpretiert. Az)
${#variable} Anzahl der Elemente in der Array-Variablen
$# Anzahl der Argumente beim Aufrufen eines Shell-Befehls
$0 Name der Shell-Befehlsdatei
$num Numth-Argument beim Aufrufen eines Shell-Befehls
$* Alle Argumente beim Aufrufen eines Shell-Befehls(Ein String, kein Array)
${variable:-word} Wenn die durch die Variable angegebene Variable definiert ist, ist ihr Wert, falls nicht definiert, der Wortwert
${variable:=word} Wenn die durch variable angegebene Variable definiert ist, wird ihr Wert festgelegt, wenn sie nicht definiert ist, wird sie als Wortwert festgelegt, und dieser Wert wird in variable festgelegt.
${variable:?word} Wenn die durch variable angegebene Variable definiert ist, wird ihr Wert angezeigt, und wenn sie nicht definiert ist, wird der Wortwert angezeigt und der Prozess endet.
${variable:+word} Wenn die durch variable angegebene Variable definiert ist, ist ihr Wert, falls nicht definiert, eine leere Zeichenfolge

Verwenden Sie den Befehl read, um Variablen von der Standardeingabe einzugeben.

Ich habe ein aktuelles Beispiel für ein Shell-Skript in einer Datei namens "script.sh" geschrieben.

script.sh


#!/bin/bash
echo "this result is produced by $0"
echo '$#' is $#
echo '$*' is $*
echo '$$' is $$ '(process id)'
echo ${word:-abcg}
echo '$1' is ${word:=$1}

Wenn Sie dies mit ./script.sh hello bash und der Befehlszeile ausführen, ist dies wie folgt. スクリーンショット 2020-04-04 15.26.09.png $$ repräsentiert die Prozess-ID der Shell. Ein typisches Beispiel hierfür ist __, um eine temporäre Datei zu erstellen, die in einem Shell-Skript verwendet wird. Wenn Sie etwas wie "tmp = tmp. $$" ersetzen, können Sie sicher eine temporäre Datei mit der Eigenschaft erstellen, dass die Prozess-ID erst nach Beendigung des Prozesses abgedeckt wird.

E / A-Umleitung

Prozesseingaben und -ausgaben werden unter Verwendung einer 0-basierten Nummer namens descriptor angegeben. 0 steht für die Standardeingabe, 1 für die Standardausgabe und 2 für die Standardfehlerausgabe. Es ist möglich, die Ausgabe in Form von "num> file" an den Deskriptor "num" in "file" auszugeben. Wenn Sie nach der Umleitung "&" und den Deskriptor "num" hinzufügen ">" zu machen "> & num", wird die Ausgabe in die "num" -Datei umgeleitet. Es ist schwer zu verstehen, deshalb werde ich ein Beispiel geben.

Das folgende "output.sh" ist ein Skript, das die Zeichenfolge stdout an die Standardausgabe und die Zeichenfolge stderr an die Standardfehlerausgabe ausgibt.

output.sh


#!/bin/bash
echo "stdout" >&1
echo "stderr" >&2

Dies ist von https://qiita.com/laikuaut/items/e1cc312ffc7ec2c872fc.

  1. Mit ./output.sh> a wird die Zeichenkette von stdout in a eingegeben. Dies ist dasselbe wie "./output.sh 1> a", nur 1 wird weggelassen.
  2. Mit ./output.sh 2> a wird die Zeichenkette von stderr in a eingegeben.
  3. Mit ./output.sh 1> a 2> b befindet sich die stdout-Zeichenfolge in a und die stderr-Zeichenfolge in b.
  4. Mit ./output.sh> & a werden beide Zeichenfolgen in a eingegeben. Das Einfügen eines Leerzeichens zwischen > und & führt zu einem Fehler.
  5. In ./output.sh> a 2> & 1 werden beide Zeichenfolgen in a eingegeben.
  6. In ./output.sh 2> & 1> a kann __a nur die stdout-Zeichenfolge __ enthalten. Dies liegt daran, dass der String stderr beim ersten 2> & 1 an die __ Standardausgabe ausgegeben wird. Danach ist > a fertig, sodass nur die Standardausgabe in die Datei geschrieben wird.

Über die Kontrollstruktur

Bei der Programmierung kann es erforderlich sein, die Bedingungen zu beurteilen, zu entscheiden, welcher Teil als nächstes ausgeführt werden soll, oder den Vorgang zu wiederholen, bis eine bestimmte Bedingung erfüllt ist. Als Syntax zur Steuerung einer solchen Ausführung hier

  1. if
  2. for
  3. while
  4. case
  5. Funktion
  6. Andere Befehle, die die Kontrollstruktur unterstützen

Aufnehmen.

  1. if

Die Syntax von if lautet wie folgt.

if commandlist1
then commandlist2
else commandlist3
fi

__ Eine Befehlsliste __ ist eine Liste von Befehlen, die durch ; oder Zeilenumbrüche getrennt sind. Wenn im Befehl "if" das Ausführungsergebnis von "commandlist1" (dh der Endstatus des letzten Befehls) das normale Ende (0) ist, wird "commandlist2" unter der Annahme ausgeführt, dass die Bedingung erfüllt ist. Andernfalls führen Sie commandlist3 aus. fi ist das Gegenteil von if. Es gibt auch elif.

  1. for

Die Grammatik von for lautet wie folgt.

for variable in list
do commandlist
done

In der Anweisung "for" wird das erste Wort der Liste "list" als Wert der Variablen "variable" festgelegt und die Befehlsliste "commandlist" von "do" bis "done" ausgeführt. Setzen Sie dann das zweite Wort in der Liste auf "Variable" und wiederholen Sie ... Es gibt auch die Befehle "continue" und "break".

Listen können auf verschiedene Arten ausgedrückt werden. Es kann als "für i in a1.py a2.py" aufgeführt sein, oder die Ersetzung des Dateinamens kann wie "für i in * .py" verwendet werden. In bash können Sie jeden Pfad der Variablen "i" zuweisen, indem Sie ":" der Umgebungsvariablen, die das Trennzeichen "IFS" darstellt, und "for i in $ PATH" setzen.

Als konkretes Beispiel das folgende "if_for.sh".

if_for.sh


#!/bin/bash
for i in u.c t.c
do
    echo $i
    cc -c $i
    if [ $? != 0 ] #Hier ist wenn Test$? !=Gleiches gilt für 0
    then break
    fi
done

cc ist der zu kompilierende Befehl. Da die Kompilierung fehlschlägt (die Dateinamen u.c und t.c sind entsprechend festgelegte Namen und können nicht kompiliert werden), wird in $? Ein anderer Wert als 0 eingegeben. Der Befehl [ hat die Form [exp], berechnet den Ausdruck für exp und wenn das Ergebnis wahr ist, endet er normal (gibt 0 als Endstatus zurück), andernfalls endet er abnormal (1 als Endstatus). Befehl (Rückgabe). Das gleiche wie der Befehl [ ist der Befehl test. Dieses Mal existiert die Datei u.c (wahrscheinlich) nicht, daher ist es in Ordnung, wenn die for-Schleife ordnungsgemäß stoppt.

Der Ausdruck "exp" enthält verschiedene Ausdrücke, daher werden einige davon angezeigt.

---a filename File filename existiert ---d Dateiname Dateiname existiert und ist ein Verzeichnis --str1 = str2 String str1 und String str2 sind gleich --str1! = str2 Der String str1 und der String str2 sind nicht gleich --num1 -eq num2 Beim Vergleich als Zahl ist die Ganzzahl num1 = die Ganzzahl num2 (gleich). --num1 -gt num2 Beim Vergleich als Zahl ist die Ganzzahl num1> die Ganzzahl num2 (größer als).

  1. while

Die Syntax von while lautet wie folgt.

while commandlist1
do commandlist2
done

Dies wiederholt Befehlsliste2, bis Befehlsliste1 normal endet (gibt 0 als Endstatus zurück). Als konkretes Beispiel das folgende "while.sh".

while.sh


while true
do
sleep 10
w
done

Dies dient dazu, den Befehl w alle 10 Sekunden auszuführen. Der Befehl w ist ein Befehl, der anzeigt, wer angemeldet ist und was sie tun. Der Befehl nach "while" tritt in die Schleife ein, wenn er erfolgreich abgeschlossen wurde (dh wenn "$?" 0 ist). Der Befehl true wird nur normal beendet, sodass er für immer wiederholt wird. Es gibt auch einen "false" -Befehl, der nur abnormal beendet wird.

  1. case

Die Grammatik des Falles ist wie folgt.

case string in
pattern1 ) commandlist1 ;;
pattern2 ) commandlist2 ;;
...
esac

Überprüfen Sie zunächst, ob die Zeichenfolge "Zeichenfolge" mit "Muster1" übereinstimmt, und führen Sie in diesem Fall "Befehlsliste1" aus. Wenn es keine Übereinstimmung gibt, gehen Sie zu pattern2. Die case-Anweisung wiederholt dies. Das letzte "esac" ist eine umgekehrte Beschreibung von "case". Als konkretes Beispiel das folgende "case.sh".

case.sh


#!/bin/bash
for word in *
do
    case $word in
        *.out)
            echo $word is out file;;
        *.sh)
            echo $word is sh file;;
        *)
            echo $word is other file;;
    esac
done

Wenn Sie beispielsweise eine Datei mit dem Namen "aa.out" bb.sh "cc.txt" in einem Verzeichnis haben, können Sie sie ausführen.

aa.out is out file
bb.sh is sh file
cc.txt is txt file

Wird angezeigt.

5. Funktion

Funktionen können in der Form name () {commandlist;} definiert werden. Nach dem Ausführen dieser Definition führt das Ausführen von "Name" als Befehl die entsprechende "Befehlsliste" aus. Ein konkretes Beispiel ist unten in func.sh geschrieben.

func.sh


go () {
echo "file name = $1"
if test ! -r $1     # !Bedeutet Verleugnung
then echo $1 is not found
else echo $1 is found
fi
}
go foo.txt
go bar.txt

Wenn Sie es mit ". / Func_script.sh" in einem Verzeichnis ausführen, in dem die Datei "foo.txt" und die Datei "bar.txt" nicht vorhanden sind

file name =  foo.txt
foo.txt is found
file name =  bar.txt
bar.txt is not found

Wird sein.

6. Andere Befehle, die die Kontrollstruktur unterstützen

-Der Befehl exec beendet die Ausführung der Shell selbst, die gerade den Befehl exec ausführt, und führt die angegebene Datei aus. Zum Beispiel wird der Befehl exec / bin / sh nach sh verschoben, wenn er erfolgreich ist, und wird in der Shell so fortgesetzt, wie er ist, wenn er fehlschlägt.

-Der Befehl "eval" gibt die Befehlszeile "commandline" als Argument an und führt sie aus. Wenn beispielsweise "eval echo hello" angezeigt wird, wird nur "hallo" angezeigt. Dies wird verwendet

  1. Wenn Sie die von einem bestimmten Befehl ausgegebene Zeichenkette als Befehl ausführen
  2. Bei der Auswertung verschachtelter Variablen Ist. Ein Beispiel für 1 ist "eval $ SHELL --version", das Ihnen die Version angibt. Ein Beispiel für 2 ist "eval" $ "$ temp", mit dem Sie den Inhalt der Variablen anzeigen können, auf die die Variable "temp" zeigt.

-Der Befehl exit beendet die Ausführung der Shell. exit expr wird mit dem Wert des Ausdrucks expr als Exit-Status beendet. Es ist normal, "exit 1" für die normale Beendigung und "exit 0" für die abnormale Beendigung einzustellen. Der Ausdruck "Ausdruck" ist optional.

-Der Befehl source existiert für csh, bash und zsh. Verwenden Sie für sh .. Im Fall von "bash shell_script" startet __ einen neuen Bash-Prozess und führt shell_script aus. Wenn es jedoch in "source" oder "." Ausgeführt wird, wird es in dieser Shell ausgeführt. Wenn Sie die folgende source_dot.sh mit source bzw. bash ausführen, können Sie feststellen, dass das aktuelle Verzeichnis nach Abschluss unterschiedlich ist. Zsh kann jedoch source nicht mehr durch . ersetzen.

source_dot.sh


echo 1 \$PWD is $PWD
echo 2 ls
ls
echo 3 change dir
cd ..
echo 4 \$PWD is $PWD
echo 5 ls
ls

-Der Befehl goto ist ein Befehl, der zu der Zeile wechselt, in der label: geschrieben wird, wenn eine Zeile mit dem Namen goto label vorhanden ist.

Signalverarbeitung

In bash und sh können Sie die Verarbeitung für das im Shell-Skript empfangene Signal mit dem Befehl trap festlegen. Mit trap command num wird der Befehl command ausgeführt, wenn das durch die Signalnummer num angegebene Signal auftritt. Wenn trap '' num, akzeptieren Sie das durch die Signalnummer num angegebene Signal nicht (führen Sie '' aus). Wenn es "Trap Num" ist, wird die Verarbeitung des durch die Signalnummer "Num" angegebenen Signals wiederhergestellt. Die folgende loop.sh wird als konkretes Beispiel vorgestellt.

loop.sh


trap "echo 'you tried to kill me!'" TERM
trap "echo 'you hit CTRL-C!'" INT
while true; do
      sleep 5
      ps
done

Wenn Sie es mit bash loop.sh starten, wird der Befehl ps alle 5 Sekunden weiter ausgeführt. Dieser Vorgang kann nicht mit "Strg-C" gestoppt werden. Dies liegt daran, dass Strg-C ein Signal namens INT sendet, aber nach Ausführung des Befehls echo wieder zur while-Anweisung zurückkehrt. Selbst wenn Sie den Prozess einmal mit "Strg-Z" stoppen, die Prozess-ID (PID) mit dem Befehl ps überprüfen und den Befehl "kill" eingeben, ist dieser Prozess noch aktiv (auch wenn Sie mit dem Befehl "fg" in den Vordergrund zurückkehren Der Versuch mich zu töten! Wird angezeigt und der Befehl ps wird weiterhin ausgeführt. Dies liegt daran, dass der Befehl kill ein Signal namens TERM sendet. Wenn Sie diesen Prozess beenden möchten, verwenden Sie den Befehl kill -KILL.

Signal beim Abmelden gesendet

Abhängig von den UNIX-Einstellungen sendet das Abmelden möglicherweise ein HUP-Signal (HangUP) an alle Prozesse, die von diesem Terminal ausgeführt werden. Prozesse, die das HUP-Signal nicht speziell verarbeiten, werden beendet, wenn sie das HUP-Signal empfangen. Der Prozess, den Sie nach dem Abmelden ausführen möchten, wird durch Hinzufügen eines Befehls nach "nohup" gestartet. Wenn Sie beispielsweise "noh up python aa.py &" einrichten, funktioniert "python aa.py" auch nach dem Abmelden weiter.

Komplexer Ersatz

Wenn der Variablenname in der Variablen n gespeichert ist, ersetzt das Schreiben von $ {$ n} zum Abrufen seines Werts diesen nicht. Dies liegt daran, dass nach der Variablensubstitution von "$ n" die Variablensubstitution nicht mehr durchgeführt wird. Um den Wert dieser Variablen abzurufen, müssen Sie ihn erneut mit "eval" oder ähnlichem auswerten. Insbesondere das Folgende. スクリーンショット 2020-04-04 17.20.45.png

Die Shell zerlegt die Befehlszeile in Argumente, nachdem alle Ersetzungen (Alias-Ersetzung, Verlaufsersetzung, Variablensubstitution, Befehlssubstitution, Dateinamensubstitution usw.) abgeschlossen sind. Wenn der Wert der Variablen __ leere Zeichenfolge __ oder __ einschließlich Leerzeichen ist, kann sich der Index __ verschieben, wenn das n-te Argument abgerufen wird. Seien Sie also vorsichtig.

Eingebaute Befehle

Der von der Shell selbst ausgeführte Befehl heißt __built-in command __. Integrierte Befehle werden als interne Befehle bezeichnet, und andere Befehle werden manchmal als externe Befehle bezeichnet. Grundsätzlich ist es für andere Prozesse unmöglich, auf den Status eines Prozesses in einer Shell zu verweisen oder diesen zu ändern. Daher ist "cd", das das aktuelle Arbeitsverzeichnis des Shell-Prozesses ändert, ein integrierter Befehl. Es können sowohl integrierte als auch externe Befehle vorhanden sein, z. B. der Befehl "kill". Der externe Befehl "kill" hat jedoch die Einschränkung, dass die von der Shell gespeicherte Auftragsnummer nicht verwendet werden kann.

Befehle, die bash unterstützen

-Basename Befehl und dirname Befehl Der Befehl basename gibt den Pfadnamen mit entferntem Verzeichnis und entfernter Erweiterung aus. Wenn keine Erweiterung angegeben ist, wird der Pfadname mit dem entfernten Verzeichnis ausgegeben. Der Befehl dirname gibt den Pfadnamen mit entferntem Dateinamen aus. Es ist einfacher zu verstehen, wenn man sich das Ausführungsbeispiel ansieht. スクリーンショット 2020-04-04 23.33.26.png

・ Befehl Ausdruck Ein Befehl, der den Argumentausdruck berechnet und das Berechnungsergebnis an die Standardausgabe ausgibt. Das Format ist expr exp. Der Ausdruck "exp" hat verschiedene Formen, von denen einige gezeigt werden.

Bezeichnung Bedeutung
exp1 & exp2 Formelexp1Und Formelexp2Wenn entweder leer oder 0 ist, wird 0 ausgegeben, andernfalls wird 0 ausgegeben.exp2Ausgabe
exp1 = exp2 Formelexp1Wannexp2Gibt 1 aus, wenn es mit einer Ganzzahl übereinstimmt, gibt ansonsten 0 aus (vergleicht Zeichenfolgen, wenn eine der beiden keine Ganzzahl ist)
exp1 + exp2 Geben Sie das Ergebnis der Addition aus (andere-Oder*、/、%Usw. verwendet werden kann)
length str StringstrLöschen Sie die Länge von
substr string exp1 exp2 Stringstringvonexp1Ab dem zweitenexp2番目von部分文字列を出力する

Bash hat jedoch eine integrierte Syntax von "$ ((exp))", sodass Sie diesen Befehl nicht verwenden müssen. Dies ist ein häufig verwendeter Befehl in sh. スクリーンショット 2020-04-04 17.38.37.png

Über die Shell

Unter UNIX werden verschiedene Shells verwendet. Die typischsten Muscheln sind sh und csh, aber diese Muscheln werden heutzutage selten verwendet. Dies liegt daran, dass es eine praktische Shell gibt, die auf diesen basiert und verschiedene Verbesserungen aufweist. Eine kurze Einführung in eine typische Shell.

--tcsh ist eine Shell mit erweiterten Funktionen, die auf csh basieren. Insbesondere gibt es viele Verbesserungen an Funktionen für interaktives Arbeiten, wie z. B. die Bearbeitung von Befehlszeilen. --ksh ist eine Shell mit erweiterten sh-Funktionen. Es wurde von David Korn entwickelt und trägt daher das Akronym k. --Bash ist eine Shell, die vom GNU-Projekt entwickelt wurde. Es basiert auf der Syntax von sh. --zsh ist eine Shell, die mit dem Ziel erstellt wurde, die "letzte Shell" zu sein. Eine ehrgeizige Shell, die fast alle vorhandenen Funktionen enthält. Es basiert auf der Syntax von sh.

nützliche Funktion

Die relativ neue Shell hat verschiedene Funktionen, die sh und csh nicht haben. Die typischen Funktionen sind wie folgt.

Es gibt viele Muscheln, also finden Sie die, die zu Ihnen passt.

Am Ende

Dies ist das Ende der Zusammenfassung. Der obige Inhalt ist nur der erste Band von [UNIX-Supertext](https://www.amazon.co.jp/new The-UNIX-Supertext-überarbeitete und erweiterte Version / dp / 4774116823). Wenn Sie also die Möglichkeit haben, der zweite Band Ich könnte es tun. Ich würde mich freuen, wenn Sie auf Fehler hinweisen könnten.

Recommended Posts

UNIX-Grundlagen (zweiter Teil)
Python x GIS-Grundlagen (1)
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 2 Grundlagen des UNIX-Befehls (zweite Hälfte)
Python x GIS-Grundlagen (3)
Grundlagen von Python x GIS (Teil 2)
Verstehen Sie den "temporären" Teil von UNIX / Linux