Allgemeine Shell-Skriptbefehle und zugehöriges Wissen unter Linux

Allgemeine Shell-Skriptbefehle und zugehöriges Wissen unter Linux

1. Einige Punkte, die Sie beachten sollten

1. Variablentyp

Beim Ausführen der Shell sind drei Variablen gleichzeitig vorhanden:

1) Lokale Variablen

Lokale Variablen werden in Skripten oder Befehlen definiert und sind nur in der aktuellen Shell-Instanz gültig. Von anderen Shells gestartete Programme können nicht auf lokale Variablen zugreifen.

2) Umgebungsvariablen

Alle Programme, einschließlich der von der Shell gestarteten, können auf Umgebungsvariablen zugreifen, und einige Programme erfordern Umgebungsvariablen, um ihren normalen Betrieb sicherzustellen. Shell-Skripte können bei Bedarf auch Umgebungsvariablen definieren.

3) Shell-Variablen

Shell-Variablen sind spezielle Variablen, die vom Shell-Programm festgelegt werden. Einige Shell-Variablen sind Umgebungsvariablen, andere sind lokale Variablen. Diese Variablen stellen den normalen Betrieb der Shell sicher.

2. Beschreibung der Shell-Variablen

$$
Die PID (ProcessID) der Shell selbst
$!
PID des zuletzt von der Shell ausgeführten Hintergrundprozesses
$?
Der Exit-Code (Rückgabewert) des zuletzt ausgeführten Befehls
$-
Liste der mit dem Set-Befehl gesetzten Flags
$*
Liste aller Parameter. Wenn "$*" in "" eingeschlossen ist, werden alle Parameter in der Form "$1 $2 ... $n" ausgegeben.
$@
Liste aller Parameter. Wenn "$@" in "" Klammern eingeschlossen ist, werden alle Parameter in der Form "$1" "$2" … "$n" ausgegeben.
$#
Die Anzahl der zur Shell hinzugefügten Parameter
$0
Der Dateiname der Shell selbst
$1~$n
Fügen Sie der Shell die Parameterwerte hinzu. $1 ist der erste Parameter, $2 ist der zweite Parameter und so weiter.

3. Der Unterschied zwischen einfachen Anführungszeichen, doppelten Anführungszeichen und umgekehrten Anführungszeichen

Wenn einfache Anführungszeichen ' ' verwendet werden, um den Wert einer Variablen einzuschließen, wird der Inhalt innerhalb der einfachen Anführungszeichen ausgegeben. Auch wenn der Inhalt Variablen und Befehle enthält (Befehle müssen in Anführungszeichen eingeschlossen werden), werden diese unverändert ausgegeben.
Wenn der Wert einer Variablen in Anführungszeichen " " eingeschlossen wird, werden bei der Ausgabe zuerst die darin enthaltenen Variablen und Befehle analysiert, statt die Variablennamen und Befehle in den Anführungszeichen unverändert auszugeben.

Durch Backticks ` ` (unterhalb der Esc-Taste) wird eine Befehlsersetzung erreicht, indem die Shell den Befehl zunächst ausführen, die Ausgabe zwischenspeichern und anschließend an der entsprechenden Stelle ausgeben kann. Sie können Variablen angeben mit

4. Shell-Escapezeichen

\\ Backslash
\a Wecker, klingelt
\b Rücktaste (Entf-Taste)
\f Seitenvorschub (FF), verschiebt die aktuelle Position an den Anfang der nächsten Seite
\n Zeilenumbruch
\r Eingeben
\t Horizontales Tabulatorzeichen (Tabulatortaste)
\v vertikales Tabulatorzeichen

5. Liste der arithmetischen Operatoren

Operator Beschreibung Beispiel
+ Die Addition `expr $a + $b` ergibt 30.
– Das Ergebnis der Subtraktion `expr $a – $b` ist 10.
\* Die Multiplikation `expr $a \* $b` ergibt 200.
/ Die Division `expr $b / $a` ergibt 2.
% Der Rest von ‚expr $b % $a‘ ist 0.
= Die Zuweisung a=$b weist a den Wert der Variablen b zu.
== ist gleich. Vergleicht zwei Zahlen und gibt „true“ zurück, wenn sie gleich sind. [ $a == $b ] gibt false zurück.
!= Ungleich. Vergleicht zwei Zahlen und gibt „true“ zurück, wenn sie unterschiedlich sind. [ $a != $b ] gibt true zurück.

6. Relationale Operatoren

Relationale Operatoren unterstützen nur Zahlen, keine Zeichenfolgen, es sei denn, der Zeichenfolgenwert ist eine Zahl.

Operator Beschreibung Beispiel
-eq prüft, ob zwei Zahlen gleich sind, und gibt „true“ zurück, wenn sie gleich sind. [ $a -eq $b ] gibt true zurück.
-ne prüft, ob zwei Zahlen gleich sind, und gibt „true“ zurück, wenn sie nicht gleich sind. [ $a -ne $b ] gibt true zurück.
-gt prüft, ob die Zahl links größer ist als die Zahl rechts und gibt „true“ zurück, wenn dies der Fall ist. [ $a -gt $b ] gibt false zurück.
-lt Überprüft, ob die Zahl links kleiner ist als die Zahl rechts, und gibt „true“ zurück, wenn dies der Fall ist. [ $a -lt $b ] gibt true zurück.
-ge prüft, ob die Zahl auf der linken Seite größer oder gleich der Zahl auf der rechten Seite ist, und gibt „true“ zurück, wenn dies der Fall ist. [ $a -ge $b ] gibt false zurück.
-le prüft, ob die Zahl auf der linken Seite kleiner oder gleich der Zahl auf der rechten Seite ist, und gibt „true“ zurück, wenn dies der Fall ist. [ $a -le $b ] gibt true zurück.

7. Liste der Booleschen Operatoren

Operator Beschreibung Beispiel
! Keine Operation. Wenn der Ausdruck wahr ist, gibt er „false“ zurück, andernfalls „true“. [ ! false ] gibt true zurück.
-o ODER-Operation, gibt „true“ zurück, wenn ein Ausdruck wahr ist. [ $a -lt 20 -o $b -gt 100 ] gibt true zurück.
-eine UND-Operation, gibt nur dann „true“ zurück, wenn beide Ausdrücke wahr sind. [ $a -lt 20 -a $b -gt 100 ] gibt false zurück.

8. Liste der Dateitestoperatoren

Operator Beschreibung Beispiel
-b Datei Überprüft, ob die Datei eine Blockgerätedatei ist und gibt „true“ zurück, wenn dies der Fall ist. [ -b $file ] gibt false zurück.
-c Datei Überprüft, ob die Datei eine Zeichengerätedatei ist und gibt „true“ zurück, wenn dies der Fall ist. [ -b $file ] gibt false zurück.
-d Datei Überprüft, ob die Datei ein Verzeichnis ist, und gibt „true“ zurück, wenn dies der Fall ist. [ -d $file ] gibt false zurück.
-f Datei Überprüft, ob die Datei eine normale Datei ist (weder ein Verzeichnis noch eine Gerätedatei) und gibt „true“ zurück, wenn dies der Fall ist. [ -f $file ] gibt true zurück.
-g Datei Überprüft, ob das SGID-Bit für die Datei gesetzt ist und gibt andernfalls „true“ zurück. [ -g $file ] gibt false zurück.
-k Datei Überprüft, ob in der Datei das Sticky Bit gesetzt ist, und gibt andernfalls „true“ zurück. [ -k $file ] gibt false zurück.
-p Datei Überprüft, ob die Datei eine benannte Pipe ist, und gibt „true“ zurück, wenn dies der Fall ist. [ -p $file ] gibt false zurück.
-u Datei Überprüft, ob das SUID-Bit für eine Datei gesetzt ist und gibt „true“ zurück, wenn dies der Fall ist. [ -u $file ] gibt false zurück.
-r Datei Überprüft, ob die Datei lesbar ist und gibt „true“ zurück, wenn dies der Fall ist. [ -r $file ] gibt true zurück.
-w Datei Überprüft, ob die Datei beschreibbar ist und gibt „true“ zurück, wenn dies der Fall ist. [ -w $file ] gibt true zurück.
-x Datei Überprüft, ob die Datei ausführbar ist und gibt „true“ zurück, wenn dies der Fall ist. [ -x $file ] gibt true zurück.
-s Datei prüft, ob die Datei leer ist (ob die Dateigröße größer als 0 ist) und gibt „true“ zurück, wenn sie nicht leer ist. [ -s $file ] gibt true zurück.
-e Datei Überprüft, ob eine Datei (einschließlich Verzeichnisse) vorhanden ist, und gibt „true“ zurück, wenn dies der Fall ist. [ -e $file ] gibt true zurück.

2. Beispiele für häufig verwendete Skriptbefehle

Das Beispiel ist zu lang, daher werde ich nur eines auflisten.

1. Wir speichern Nginx-Protokolle in nginx.log, zählen die Anzahl der Zugriffs-IPs am 23. April 2020 und sortieren sie in absteigender Reihenfolge

Beispiel: 192.168.1.20 - - [21/Apr/2020:14:27:49 +0800] "GET /1/index.php HTTP/1.1" 404 490 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"

cat nginx.log | grep 23.04.2020 | awk -F "-" '{print $1}'|sort|uniq -c | sort -r | awk '{print $1,$2}'

2. Wir speichern Nginx-Protokolle in nginx.log und zählen die Anzahl der doppelten IP-Besuche von 20:00 bis 23:00 Uhr am 23. April 2020

Beispiel: 192.168.1.20 - - [21/Apr/2020:14:27:49 +0800] "GET /1/index.php HTTP/1.1" 404 490 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"

cat nginx.log | grep 23.04.2020:2[0-3] | awk '{print $1}' | sortieren | uniq | wc -l

3. Wir speichern Nginx-Protokolle in nginx.log und schreiben Skripte, um IP-Adressen zu zählen, die mehr als dreimal besucht wurden

Beispiel: 192.168.1.20 - - [21/Apr/2020:14:27:49 +0800] "GET /1/index.php HTTP/1.1" 404 490 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"

cat nginx.log | awk '{print $1}'| sortieren | uniq -c | awk '{if ($1 >3) print $0}' | sortieren -r | awk '{print $1,$2}'

Awk-Datenfeldvariablen
$0 steht für die gesamte Textzeile
$1 stellt das erste Datenfeld im Text dar
$2 stellt das zweite Datenfeld im Text dar
$n stellt das n-te Datenfeld im Text dar

4. Tragen Sie die Ergebnisse des netstat-Befehls in netstat.txt ein, zeigen Sie alle IPs an, die eine Verbindung mit Port 3306 des lokalen Computers hergestellt haben und sich im hergestellten Zustand befinden, und sortieren Sie sie in absteigender Reihenfolge nach der Anzahl der Verbindungen

Beispiel: tcp 0 0 172.16.56.200:41856 172.16.34.144:3306 ESTABLISHED

cat netstat.txt | grep HERGESTELLT | grep 3306 | awk '{print $5}' | awk -F ":" '{print $1}' | sort | uniq -c | sort -hr | awk '{print $1,$2}'

5. Zählen Sie die verwendeten oder nicht verwendeten IP-Adressen im Netzwerksegment

#!/bin/bash
für IP in „seq 0 255“
 Tun
 ping -c 1 -i 0 192.168.2.$ip
wenn [ $? -eq 0 ]
Dann
 echo "192.168.2.$ip" >> /root/up.txt
anders
 echo "192.168.2.$ip" >> /root/down.txt
fi
Erledigt

6. Lesen Sie die Anzahl der Zeilen in der Datei und lesen Sie sie Zeile für Zeile in einer Schleife

Beispiel: cat http

www.baidu.com

www.cityhouse.cn

www.cityre.cn

vim httpttp.sh

cat /data/script/http | während Zeile lesen
Tun
  curl $zeile 
Erledigt
Datum = `Datum "+%Y-%m-%d-%H-%M-%S"`
echo "erfolgreich$datum" >> /data/script/http.txt

Dies ist das Ende dieses Artikels über häufig verwendete Shell-Skriptbefehle und zugehöriges Wissen unter Linux. Weitere relevante Shell-Skriptbefehle unter Linux finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So erhalten Sie die lokale IP-Adresse im Linux-Shell-Skript
  • So legen Sie das feste Format am Anfang eines Shell-Skripts in Linux fest
  • Linux verwendet Shell-Skripte, um historische Protokolldateien regelmäßig zu löschen

<<:  Beispiel für die Verwendung von CSS zum Erzielen eines Schwebeeffekts beim Bewegen der Maus über die Karte

>>:  Verwenden Sie das Firebug-Tool, um die Seite auf dem iPad zu debuggen

Artikel empfehlen

Verhindern von SQL-Injection in Webprojekten

Inhaltsverzeichnis 1. Einführung in SQL-Injection...

Lösung zum Erstellen mehrerer Datenbanken, wenn Docker PostgreSQL startet

1 Einleitung Im Artikel „PostgreSQL mit Docker st...

Fallstudie zur dynamischen Datenbindung von this.$set in Vue

Ich finde, dass die Erklärung von this.$set im In...

4 Möglichkeiten zum Anzeigen von Prozessen in LINUX (Zusammenfassung)

Ein Prozess ist ein Programmcode, der in der CPU ...

Beheben Sie den Fehler während der Verbindungsausnahme in Docker

Wenn Sie Docker zum ersten Mal verwenden, werden ...

Implementierung von Linux-Dateisystemvorgängen

In dieser Lesenotiz werden hauptsächlich die Vorg...

Vollständige Schritte zum Mounten einer neuen Datenfestplatte in CentOS7

Vorwort Ich habe gerade einen neuen VPS gekauft. ...

So installieren Sie den Vim-Editor unter Linux (Ubuntu 18.04)

Sie können das Desktopsystem von der offiziellen ...

Implementierung des HTML-Gleit- und Schwebeball-Menüeffekts

CSS-Stile html,Text{ Breite: 100 %; Höhe: 100%; R...

Mehrere Möglichkeiten zur Implementierung der Vererbung in JavaScript

Inhaltsverzeichnis Strukturelle Vererbung (implem...

Implementierung eines schwebenden Werbestreifens in HTML und CSS

1.html Teil Code kopieren Der Code lautet wie folg...

Docker-Compose-Installation DB2-Datenbankbetrieb

Es ist mühsam, die db2-Datenbank direkt auf dem H...