So führen Sie ein SH-Skript von der Konsole aus aus. Wir schreiben Skripte unter Linux (Lernen anhand von Beispielen). Führen Sie mehrere Befehle gleichzeitig aus

Egal wie einfach die grafische Oberfläche in Linux ist und wie viele Funktionen es gibt, es gibt immer noch Aufgaben, die bequemer über das Terminal gelöst werden können. Erstens, weil es schneller ist, und zweitens verfügen nicht alle Maschinen über eine grafische Oberfläche. Beispielsweise werden auf Servern alle Aktionen über das Terminal ausgeführt, um Rechenressourcen zu sparen.

Wenn Sie bereits ein erfahrenerer Benutzer sind, führen Sie wahrscheinlich häufig verschiedene Aufgaben über das Terminal aus. Es gibt oft Aufgaben, für die Sie mehrere Befehle nacheinander ausführen müssen. Um beispielsweise das System zu aktualisieren, müssen Sie zuerst die Repositorys aktualisieren und erst dann neue Versionen von Paketen herunterladen. Dies ist nur ein Beispiel und es gibt viele solcher Aktionen, sogar das Erstellen von Backups und das Hochladen kopierter Dateien Remote-Server. Um dieselben Befehle nicht mehrmals einzugeben, können Sie daher Skripte verwenden. In diesem Artikel werden wir uns mit dem Schreiben von Skripten in Bash befassen und uns sozusagen mit den grundlegenden Operatoren und ihrer Funktionsweise befassen. Bash-Skript Es ist von Grund auf neu.

Ein Skript, oder wie es auch genannt wird, ist eine Folge von Befehlen, die nacheinander gelesen und von einem Interpreterprogramm, in unserem Fall einem Programm, ausgeführt werden Befehlszeile- bash.

Das Skript ist normal Textdatei, in dem die häufigsten Befehle aufgeführt sind, die wir normalerweise manuell eingeben, sowie das Programm, das sie ausführt. Der Loader, der das Skript ausführt, weiß nicht, wie er mit Umgebungsvariablen arbeiten soll, daher muss ihm der genaue Pfad zu dem Programm übergeben werden, das gestartet werden muss. Anschließend wird Ihr Skript an dieses Programm übertragen und die Ausführung beginnt.

Ein einfaches Beispiel für ein Bash-Shell-Skript:

!/bin/bash
echo „Hallo Welt“

Das Echo-Dienstprogramm zeigt die ihm als Parameter übergebene Zeichenfolge auf dem Bildschirm an. Die erste Zeile ist etwas Besonderes, sie gibt das Programm an, das die Befehle ausführt. Generell können wir ein Skript in jeder anderen Programmiersprache erstellen und den gewünschten Interpreter angeben, zum Beispiel in Python:

!/usr/bin/env python
print("Hallo Welt")

Oder in PHP:

!/usr/bin/env php
echo „Hallo Welt“;

Im ersten Fall haben wir direkt auf das Programm verwiesen, das die Befehle ausführt. In den nächsten beiden Fällen kennen wir die genaue Adresse des Programms nicht und bitten daher das Dienstprogramm env, es anhand des Namens zu finden und auszuführen. Dieser Ansatz wird in vielen Skripten verwendet. Aber das ist noch nicht alles. IN Linux-System Damit das System das Skript ausführen kann, müssen Sie das Executable-Flag für die Datei damit setzen.

Dieses Flag ändert nichts an der Datei selbst, es teilt dem System lediglich mit, dass es sich nicht nur um eine Textdatei, sondern um ein Programm handelt und dieses ausgeführt, die Datei geöffnet, der Interpreter erkannt und ausgeführt werden muss. Wenn kein Interpreter angegeben ist, wird standardmäßig der Interpreter des Benutzers verwendet. Da jedoch nicht jeder Bash verwendet, müssen Sie dies explizit angeben.

Machen:

chmod ugo+x script_file

Lassen Sie uns nun unser kleines erstes Programm ausführen:

./Skriptdatei

Alles arbeitet. Sie wissen bereits, wie man ein kleines Skript schreibt, beispielsweise für die Aktualisierung. Wie Sie sehen, enthalten die Skripte dieselben Befehle, die im Terminal ausgeführt werden, und sie sind sehr einfach zu schreiben. Aber jetzt machen wir es etwas komplizierter. Da es sich bei einem Skript um ein Programm handelt, muss es einige Entscheidungen selbst treffen, die Ergebnisse der Befehlsausführung speichern und Schleifen ausführen. Mit der Bash-Shell können Sie all dies tun. Es stimmt, hier ist alles viel komplizierter. Beginnen wir mit etwas Einfachem.

Variablen in Skripten

Das Schreiben von Skripten in Bash ist selten abgeschlossen, ohne temporäre Daten zu speichern, was das Erstellen von Variablen erfordert. Keine einzige Programmiersprache kommt ohne Variablen aus, auch nicht unsere primitive Befehls-Shell-Sprache.

Möglicherweise sind Sie schon einmal auf Umgebungsvariablen gestoßen. Es handelt sich also um dieselben Variablen und sie funktionieren auf die gleiche Weise.

Lassen Sie uns zum Beispiel eine String-Variable deklarieren:

string="Hallo Welt"

Der Wert unserer Zeichenfolge steht in Anführungszeichen. Doch in der Realität sind Anführungszeichen nicht immer notwendig. Das Hauptprinzip von Bash bleibt hier erhalten: Ein Leerzeichen ist ein Sonderzeichen, ein Trennzeichen. Wenn Sie also keine Anführungszeichen verwenden, wird world bereits als separater Befehl betrachtet, aus dem gleichen Grund setzen wir keine Leerzeichen vor und nach dem Gleichheitszeichen Zeichen.

Das $-Symbol wird verwendet, um den Wert einer Variablen anzuzeigen. Zum Beispiel:

Ändern wir unser Skript:

!/bin/bash
string1="Hallo"
string2=Welt
string=$string1$string2
echo $string

Und wir prüfen:

Bash unterscheidet nicht zwischen Variablentypen wie Hochsprachen wie C++; Sie können einer Variablen entweder eine Zahl oder einen String zuweisen. Ebenso wird dies alles als Zeichenfolge betrachtet. Die Shell unterstützt nur das Zusammenführen von Zeichenfolgen. Schreiben Sie dazu einfach die Variablennamen hintereinander:

!/bin/bash
string1="Hallo"
string2=Welt
string=$string1$string2\ und\ ich
string3=$string1$string2" und ich"
echo $string3

Wir überprüfen:

Bitte beachten Sie, dass Anführungszeichen, wie gesagt, optional sind, wenn die Zeichenfolge keine Sonderzeichen enthält. Schauen Sie sich beide Methoden zum Zusammenführen von Zeichenfolgen genauer an. Sie zeigen auch die Rolle von Anführungszeichen. Wenn Sie komplexere String-Verarbeitungen oder arithmetische Operationen benötigen, ist dies nicht in den Fähigkeiten der Shell enthalten; hierfür werden reguläre Dienstprogramme verwendet.

Variablen und Befehlsausgabe

Variablen wären nicht so nützlich, wenn sie die Ergebnisse laufender Dienstprogramme nicht speichern könnten. Hierzu wird folgende Syntax verwendet:

$(Team )

Bei diesem Design wird die Ausgabe des Befehls direkt dorthin umgeleitet, wo er aufgerufen wurde, und nicht auf den Bildschirm. Beispielsweise gibt das Datumsdienstprogramm das aktuelle Datum zurück. Diese Befehle sind äquivalent:

Verstehst du? Schreiben wir ein Skript, in dem es angezeigt wird Hallo Welt und Datum:

string1="Hallo Welt"
string2=$(Datum)

string=$string1$string2

Jetzt wissen Sie genug über Variablen, um ein Bash-Skript zu erstellen, aber es kommt noch mehr. Als nächstes werden wir uns Parameter und Kontrollstrukturen ansehen. Ich möchte Sie daran erinnern, dass dies alles normale Bash-Befehle sind und Sie sie nicht in einer Datei speichern müssen; Sie können sie sofort unterwegs ausführen.

Skriptparameter

Es ist nicht immer möglich, ein Bash-Skript zu erstellen, das nicht von Benutzereingaben abhängt. In den meisten Fällen müssen Sie den Benutzer fragen, welche Aktion er ausführen oder welche Datei er verwenden soll. Beim Aufruf eines Skripts können wir ihm Parameter übergeben. Alle diese Parameter stehen als Variablen mit der Bezeichnung Zahlen zur Verfügung.

Eine Variable mit dem Namen 1 enthält den Wert des ersten Parameters, Variable 2 enthält den Wert des zweiten und so weiter. Dieses Bash-Skript gibt den Wert des ersten Parameters aus:

!/bin/bash
echo $1

Kontrollkonstrukte in Skripten

Ohne die Möglichkeit, bestimmte Faktoren zu analysieren und als Reaktion darauf die erforderlichen Aktionen durchzuführen, wäre die Erstellung eines Bash-Skripts nicht so nützlich. Dies ist ein ziemlich komplexes Thema, aber es ist sehr wichtig, um ein Bash-Skript zu erstellen.

In Bash gibt es einen Befehl zum Überprüfen von Bedingungen. Seine Syntax lautet wie folgt:

wenn command_condition
Dann
Team
anders
Team
fi

Dieser Befehl prüft den Exit-Code des Bedingungsbefehls und führt bei 0 (Erfolg) den Befehl oder mehrere Befehle nach dem Wort aus. Wenn der Exit-Code 1 ist, wird der else-Block ausgeführt. fi bedeutet das Ende des Befehlsblocks .

Da uns aber meistens nicht der Rückgabecode eines Befehls interessiert, sondern der Vergleich von Zeichenfolgen und Zahlen, wurde der Befehl [[ eingeführt, mit dem Sie verschiedene Vergleiche durchführen und abhängig vom Ergebnis einen Rückgabecode ausgeben können Vergleich. Seine Syntax ist:

[[Parameter1 Operator Parameter2]]

Zum Vergleich verwenden wir die uns bereits bekannten Operatoren<,>,=,!= usw. Wenn der Ausdruck wahr ist, gibt der Befehl 0 zurück, andernfalls - 1. Sie können sein Verhalten im Terminal ein wenig testen. Der Rückkehrcode des letzten Befehls wird in der Variablen $? gespeichert:

Wenn wir all dies kombinieren, erhalten wir ein Skript mit einem bedingten Ausdruck:

!/bin/bash
wenn [[ $1 > 2 ]]
Dann
echo $1" ist größer als 2"
anders
echo $1" ist kleiner als 2 oder 2"
fi

Natürlich verfügt dieses Design über leistungsfähigere Funktionen, aber es ist zu komplex, sie in diesem Artikel zu behandeln. Vielleicht schreibe ich später darüber. Kommen wir zunächst zu den Zyklen.

Schleifen in Skripten

Der Vorteil der Programme besteht darin, dass wir in wenigen Zeilen angeben können, welche Aktionen mehrmals ausgeführt werden müssen. Es ist beispielsweise möglich, Bash-Skripte zu schreiben, die nur aus wenigen Zeilen bestehen, aber stundenlang laufen, Parameter analysieren und die notwendigen Aktionen ausführen.

Schauen wir uns zunächst die for-Schleife an. Hier ist seine Syntax:

für Variable in der Liste
Tun
Team
Erledigt

Durchläuft die gesamte Liste und weist einer Variablen nacheinander einen Wert aus der Liste zu. Nach jeder Zuweisung führt es die Befehle zwischen do und done aus.

Schauen wir uns zum Beispiel fünf Zahlen an:

für Index in 1 2 3 4 5
Tun
echo $index
Erledigt

Oder Sie können alle Dateien aus dem aktuellen Verzeichnis auflisten:

für Datei in $(ls -l); do echo „$file“; Erledigt

Wie Sie wissen, können Sie nicht nur Namen anzeigen, sondern auch die erforderlichen Aktionen ausführen. Dies ist beim Erstellen eines Bash-Skripts sehr nützlich.

Die zweite Schleife, die wir uns ansehen werden, ist die while-Schleife, die so lange läuft, bis der Bedingungsbefehl den Code 0 (Erfolg) zurückgibt. Schauen wir uns die Syntax an:

while-Befehlsbedingung
Tun
Team
Erledigt

Schauen wir uns ein Beispiel an:

!/bin/bash
Index=1
während [[ $index< 5 ]]
Tun
echo $index
sei „index=index+1“
Erledigt

Wie Sie sehen, ist alles erledigt, der let-Befehl führt einfach die angegebene mathematische Operation aus und erhöht in unserem Fall den Wert der Variablen um eins.

Ich möchte noch auf eine Sache hinweisen. Konstrukte wie while, for, if sollen in mehreren Zeilen geschrieben werden, und wenn Sie versuchen, sie in eine Zeile zu schreiben, erhalten Sie eine Fehlermeldung. Dies ist jedoch möglich; setzen Sie dazu an der Stelle, an der ein Zeilenumbruch erfolgen soll, ein Semikolon „;“. Die vorherige Schleife könnte beispielsweise als einzelne Zeile ausgeführt werden:

index=1; während [[ $index< 5 ]]; do echo $index; let "index=index+1"; done;

Alles ist sehr einfach, ich habe versucht, den Artikel nicht mit zusätzlichen Begriffen und Bash-Funktionen zu komplizieren, sondern nur mit den grundlegendsten Dingen. In einigen Fällen müssen Sie möglicherweise eine GUI für ein Bash-Skript erstellen. Anschließend können Sie Programme wie Zenity oder Kdialog verwenden. Mit deren Hilfe ist es sehr praktisch, dem Benutzer Nachrichten anzuzeigen und sogar Informationen von ihm anzufordern.

Schlussfolgerungen

Jetzt verstehen Sie die Grundlagen zum Erstellen eines Skripts unter Linux und können das Skript schreiben, das Sie beispielsweise für benötigen Exemplar reservieren. Ich habe versucht, Bash-Skripte von Grund auf zu überprüfen. Daher wurden nicht alle Aspekte berücksichtigt. Vielleicht werden wir in einem der folgenden Artikel auf dieses Thema zurückkommen.

Die Befehlszeile und die unglaublichen Möglichkeiten, die man damit machen kann, sind das Markenzeichen von UNIX und allen seinen Nachfolgern. Und wo eine Befehlszeile ist, sind auch Skripte. Und heute... nein, wir werden nicht lernen, Skripte zu schreiben, wir werden uns die nützlichsten davon ansehen, diejenigen, die Sie täglich verwenden können, um eine Vielzahl von Problemen zu lösen, von Wetterberichten und einem Webserver in einer Zeile bis hin zu ein Bot für Twitter in zehn Zeilen und ein Skript für automatischer Start jeder Torrent-Client.

Lassen Sie mich gleich einen Vorbehalt machen, dass ich überhaupt kein Anhänger des Schamanismus bin und Sie in keiner Weise dazu auffordern, in einer grün-schwarzen Konsole zu sitzen und einen Haufen Buchstaben einzugeben, um Aktionen auszuführen, für die Sie gerade in der grafischen Oberfläche sind Sie müssen mit der Maus über das gewünschte Element fahren. Ich bin jedoch davon überzeugt, dass die Konsole und die Skripte zur Lösung vieler Probleme viel besser sind als die grafische Oberfläche und daher nicht vernachlässigt werden dürfen. Darüber hinaus können Sie in jedem DE ein Symbol für das Skript erstellen, sodass Sie nicht einmal die Konsole öffnen müssen, um es auszuführen.

Einfache Beispiele

Kommen wir also ohne weiteres Geschwätz direkt zu den Beispielen:

$ Curl ifconfig.co

Das einfacher Befehl zeigt Ihnen die externe IP an – ideal, wenn Sie über einen Router auf das Netzwerk zugreifen. Es genügt lediglich, den ifconfig.co-Server zu kontaktieren, der die IP in einer Zeile anstelle einer vollständigen Webseite zurückgibt.

Und ja, das ist überhaupt kein Skript, es ist nur ein Befehl, aber um einen Befehl in ein Skript umzuwandeln, fügen Sie ihn einfach in eine Textdatei ein und fügen Sie als erste Zeile den sogenannten Shebang hinzu, also die Symbole # !, gefolgt vom Namen des Befehlsinterpreters:

$ chmod +x ~/bin/myip.sh

Jetzt kann es von der Kommandozeile aus mit dem Befehl myip.sh aufgerufen werden.

#!/bin/sh curl -4 wttr.in/Moscow

Mit diesem Skript können Sie einen Wetterbericht für vier Tage abrufen. Das Prinzip ist hier das gleiche wie bei ifconfig.co.

Wetterbericht in der Konsole #!/bin/sh dig +short txt $1.wp.dg.cx

Und so können Sie bekommen Kurzbeschreibung irgendetwas auf Wikipedia und die Verwendung einer DNS-Abfrage, anstatt einen Webserver zu kontaktieren. Übrigens lässt sich ein Webserver auch ganz einfach über die Kommandozeile erstellen:

#!/bin/sh while (nc -l 80< file.html >:) ; Tun: ; Erledigt

Dieses Skript basiert auf dem Dienstprogramm netcat (nc), das als Schweizer Taschenmesser für Netzwerkoperationen bezeichnet wird. Das Skript startet eine Schleife, die den Befehl nc ausführt, der Port 80 abhört und auf die Anfrage mit antwortet Datei.html, wodurch die übergebene Anfrage ins Nirgendwo gesendet wird (das Symbol bedeutet noop, also eine leere Operation).

Mit einfachen Skripten und Befehlen können Sie ganz einfach Internetradio hören:

#!/bin/sh mpv --volume=50 -playlist ~/16bit.fm_128.m3u

Selbstverständlich muss die Playlist im M3U-Format vorab von der Website des Radiosenders heruntergeladen werden. Übrigens, wenn Sie MPlayer mit dem Argument ausführen --input-ipc-server=/tmp/mpvsocket, kann es durch das Schreiben von Befehlen in eine Datei gesteuert werden. Passen Sie beispielsweise die Lautstärke an:

Echo „Lautstärke +10“ | socat – /tmp/mpvsocket

Erstellen Sie zwei Skripte: eines zum Starten, das andere zum Stoppen des Radios (mit der Zeile killall mpv), hängen Sie sie auf Ihren Desktop und konfigurieren Sie die DE-Hotkeys zur Steuerung der Wiedergabe. Voila, Sie haben einen fertigen Player für Internetradio, den Sie durch einen einfachen Klick auf das Symbol auf Ihrem Desktop starten können. Und es wird kaum Speicher verbrauchen oder das Fach belegen.

Aber machen wir eine Pause vom Netzwerkbetrieb und kehren wir zu den lokalen Angelegenheiten zurück.

#!/bin/sh tar -czf "../$(PWD##*/).tar.gz" .

Dies ist eines meiner Lieblingsskripte. Es erstellt ein tar.gz-Archiv des aktuellen Verzeichnisses. Besonders hervorzuheben ist hier die $(PWD##*/)-Konstruktion, die den vollständigen Pfad zum aktuellen Verzeichnis (die $PWD-Variable) übernimmt und den ersten Teil bis zum letzten Schrägstrich daraus entfernt, so dass nur der Name des Verzeichnisses übrig bleibt Verzeichnis selbst. Als nächstes wird die Erweiterung tar.gz hinzugefügt. Mehr über solche Konstrukte können Sie in man bash lesen.

#!/bin/sh while true; Führen Sie inotifywait -r -e MODIFY DIRECTORY && YOUR_COMMAND aus, fertig

Dabei handelt es sich um ein Skript, das als Reaktion auf Änderungen in Dateien im Verzeichnis einen Befehl ausführt. Es kann für viele verschiedene Zwecke verwendet werden, beispielsweise zum automatischen Einschalten des Players beim Speichern einer MP3-Datei. Oder zeigen Sie einfach eine Benachrichtigung auf dem Desktop an, indem Sie notify-send als Befehl verwenden:

Benachrichtigen-senden „Datei geändert“

Desktop

Da es sich um den Desktop handelt, fahren wir fort. Wie die Konsole kann auch sie per Skript erstellt werden. Hier ist zum Beispiel ein Skript, das zufällige Hintergrundbilder herunterlädt, die auf dem Wallpaper-Reddit-Kanal veröffentlicht wurden:

Die Fortsetzung steht nur Mitgliedern zur Verfügung

Option 1: Treten Sie der „Site“-Community bei, um alle Materialien auf der Site zu lesen

Durch die Mitgliedschaft in der Community innerhalb des angegebenen Zeitraums erhalten Sie Zugriff auf ALLE Hacker-Materialien, erhöhen Ihren persönlichen kumulativen Rabatt und können eine professionelle Xakep-Score-Bewertung erwerben!

Für Schreiben eines einfachen Bash-Skripts, müssen wir die folgenden einfachen Schritte ausführen:

So funktioniert das Ganze:

Die erste Zeile unseres Skripts ist für die erfolgreiche Ausführung unseres Skripts von entscheidender Bedeutung.

Die zweite Zeile erstellt das Verzeichnis testdir

In der dritten Zeile können Sie zum erstellten Testdir-Verzeichnis wechseln

Team berühren Die nächste Zeile erstellt drei Dateien

und der letzte Befehl in der Zeile unseres Skripts ermöglicht es Ihnen, den Inhalt des aktuellen Verzeichnisses anzuzeigen, in dem dank der vorherigen Zeile drei leere Dateien erschienen sind.

Wie wir sehen, in unserem einfaches Skript Alle Befehle beginnen mit Neue Zeile. Beim Ausführen des Skripts führt jede Zeile nacheinander ihre Arbeit aus und führt bestimmte Aktionen aus.

Wenn Sie unter Linux täglich eine Kette identischer Befehle (mit konstanten Parametern) ausführen, ist es möglicherweise sinnvoll, dass Sie dieselben schreiben einfaches Bash-Skript, wodurch Sie Zeit sparen und Ihre Arbeit automatisieren können.

Es kommt häufig vor, dass bestimmte Aktionen automatisiert werden müssen. Bash-Skripte sind immer eine Rettung!
Vergessen Sie nicht, dass Sie, damit das Skript ausgeführt werden kann, die Zugriffsrechte dafür ändern und die Möglichkeit zum Ausführen der Datei hinzufügen müssen.

1.E/A, Umleitung

#!/bin/bash # Jedes Shell-Skript beginnt immer mit der Zeile #!/bin/bash (oder #!/bin/sh) # Kommentare beginnen immer mit dem Vorzeichen # # Um eine Nachricht anzuzeigen, verwenden Sie den ECHO-Befehl echo " hallo, Welt“ # und dies ist ein Beispiel für eine formatierte Ausgabe ...

fast wie in C printf "formatierte Ausgabe ten=%d line=%s float=%f hexadecimal_number=0x%X\n" 10 "line" 11.56 234 # Beispiel für das Lesen der Tastatureingabe read A echo $A printf " Sie haben gerade eingegeben das Wort: %s\n" "$A" #Umleitung, Pipelines, Abrufen der Ausgabe eines anderen Programms # Beispiel für die Generierung eines 10-Buchstaben-Passworts PASSWORD1=`cat /dev/urandom | tr -d -c ‘a-zA-Z0-9’ | falten -w 10 | head -1` echo Password=$PASSWORD1 #Anführungszeichen der Form „ geben das Ergebnis der Ausgabe auf dem Bildschirm an, was in ihnen enthalten ist (d. h. das in solchen Anführungszeichen geschriebene #Programm oder Skript wird ausgeführt und das Ergebnis, das sie auf der #Standardausgabe ausgeben, ist das Ergebnis der Operation „backquotes“ #in diesem Fall ist das Ergebnis die Ausgabe einer Pipeline mehrerer Programme.

Interessante Bash-Skripte für Linux-Terminal-Liebhaber

#operation | steht für Förderer. Diese. In unserem Beispiel: #cat /dev/urandom gibt den Inhalt der Datei /dev/urandom (eine spezielle Datei zur Generierung von Pseudozufallszahlen) an std.output aus. #tr führt die Übersetzung durch, d. h. ersetzt einige Bytes durch andere (dies ist notwendig, um das Erscheinen nicht druckbarer Zeichen im Passwort zu vermeiden). #fold teilt das, was es bei der Standardeingabe erhalten hat, in Zeilen mit einer Länge von 10 Zeichen auf und zeigt es auf der Standardausgabe an. #head -1 druckt die erste Zeile was sie über die Standardeingabe erhalten hat. # oder so: PASSWORD2=`cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c10` echo Passwort=$PASSWORD2

2. Arithmetische Operationen, Zyklen nach Anzahl

#!/bin/bash A="10" B="5" C=`expr $A + $B` printf "A=10 B=5 C=expr \$A + \$B C=%d \n" "$C" # Beispiel einer Schleife durch i I=0 while [ $I -lt 15 ] do printf "0x%02x " "$I" I=`expr $I + 1` done echo

3. Verschiedene Arten von Schecks

#!/bin/bash # Beispiel für die Prüfung der Existenz einer Datei # eine Datei erstellen test1 touch test1 # die Existenz einer Datei prüfen test1 if [ -f test1 ] ; then echo „Datei test1 existiert“ fi # auf Nichtexistenz der Datei test2 prüfen, wenn ! [ -f test2 ] ; then echo „Datei test2 existiert nicht“ fi # Kurzreferenz zu anderen Befehlsoptionen # -d Dateiname Verzeichnis existiert # -f Dateiname Datei existiert # -L Dateiname symbolischer Link existiert # -r, -w, -x Datei ist lesbar, beschreibbar oder ausführen # -s Dateiname die Datei existiert und hat eine Länge ungleich Null # f1 -nt f2 f1 ist neuer als f2 # f1 -ot f2 f1 ist älter als f2

Schlagworte: Bash, FreeBSD, Shell

Hinterlassen Sie einen Kommentar über:

So schreiben Sie ein einfaches Bash-Skript

Wie führe ich mehrere Befehle nacheinander oder alle gleichzeitig aus? Wenn Sie mehrere Befehle ausführen müssen, wird das Symbol „ dazwischen platziert ; "genannt Metazeichen. Die Syntax ist wie folgt Befehl1;Befehl2;Befehl3

Befehle getrennt durch „ ; » werden nacheinander durchgeführt. Shell wartet auf den nächsten Befehl und kehrt zur Eingabeaufforderung zurück, nachdem der letzte Befehl ausgeführt wurde.

Führen Sie mehrere Befehle gleichzeitig aus

Um mehrere Befehle gleichzeitig auszuführen, fügen Sie am Ende des Befehls ein kaufmännisches Und „&“ ein. Betrachten Sie beispielsweise den Anfang des Backup-Skripts:

# /root/ftpbackup.sh &

Und Ihr Terminal ist für die weitere Nutzung frei, Sie müssen nicht warten, bis die Ausführung des Skripts /root/ftpbackup.sh abgeschlossen ist!

Alles zusammen nutzen

Möglicherweise verfügen Sie über Tausende von *.bak-Dateien. Sie müssen jedoch lediglich die gewünschten Kategorien auflisten und alles in /tmp/list einfügen:

# für d in „/home/sales /home/dbs /data1“; Finden Sie $d -iname „*.bak“ >> /tmp/list; Erledigt &

Quelle

BASH lernen (Grundlagen)

Datum: 10.12.2012

Lernen, Skripte zu schreiben

Zum größten Teil besteht Linux aus Skripten, Sie müssen also nur diese Sprache beherrschen.
Im Kern ist es nur ein Set Linux-Befehle, kombiniert mit verschiedenen Konstrukten zu intelligentem und durchdachtem Code.

Lassen Sie uns unser erstes Skript erstellen.
Dazu öffnen wir einfach Texteditor und füllen Sie die Datei mit Folgendem:

#!/bin/bash
WHO; Datum

Hier ist alles einfach.
Von Natur aus wird das scharfe Zeichen (#) im Allgemeinen als Beginn eines Kommentars angesehen, aber hier, beginnend mit der ersten Zeile, sagt es uns, dass der Bash-Interpreter verwendet werden sollte.

1) Ausführungsberechtigungen müssen erteilt werden

chmod u+x bash1.sh

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/game

Und verschieben Sie diese Datei in eines der Verzeichnisse, es sei denn, Sie müssen einfach über den Namen und nicht über den Zugriff darauf zugreifen voller Platz Standort.

Hier haben wir uns angeschaut, wie das Skript erstellt wird, dann müssen wir noch ein paar Dinge verstehen.

Wann immer wir Skripte schreiben, manipulieren wir Variablen, leiten Eingabe und Ausgabe um, arbeiten mit Pipes und führen mathematische Berechnungen durch.

Variablen

Um eine neue Variable zu definieren, sagen Sie einfach:

#!/bin/bash
F=Ivan
I=Iwanow
O=Iwanich
#Ausgabe mit:
echo „FIO $F $I $O“

Ergebnis

sh bash2.sh
FIO Ivan Ivanov Ivanich

Variablen anzeigen;
#Satz

BASH=/bin/bash
HISTFILE=/root/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/root
SSH_CLIENT=’192.168.200.3 9382 22′
SSH_CONNECTION=’192.168.200.3 9382 192.168.200.252 22′

Es gibt noch ein weiteres sehr interessantes und nützliche Weise Setzen einer Variablen mit ` `

#!/bin/bash
day=`Datum +%y%m%d`
# Zukünftig kann die Variable $day in ein Skript eingefügt werden, beispielsweise ein Backup

rsync -avz /root/data /root/backup.$day

Als Ergebnis der Ausführung eines solchen Skripts wird ein Backup angezeigt, das das Datum angibt, an dem das Backup erstellt wurde.

Eingabe und Ausgabe umleiten.

> Umleitung auf eine Datei mit vollständigem Überschreiben des Dateiinhalts
>> Mit einem Anhang an eine Datei an das Ende des vorhandenen Inhalts weiterleiten.
ls -al / > 123
Und der Befehl:
ls -al /home >> 123
Listet alle Dateien im Stammverzeichnis auf und hängt anschließend den Inhalt des Home-Verzeichnisses an
Diese Umleitung wird als Ausgabeumleitung bezeichnet
Eingabeumleitung – Inhalte werden an den Befehl umgeleitet.
Sortieren< sort.txt
Der Sortierbefehl sortiert alphabetisch. Dadurch wird die chaotisch gefüllte Datei sort.txt nach der Umleitung zum Sortierprogramm alphabetisch sortiert
Sortieren< sort.txt | more — а построение в канал отобразит отсортированные данные постранично
Sortieren< sort.txt | grep s | more — отсортирует и выведет все со знаком «S»

Eine weitere nützliche Sache ist die Weitergabe des Ergebnisses eines Befehls an einen anderen oder mehrere.
Ein Beispiel hierfür wäre:

cat /var/log/maillog | grep blockiert | mehr

1) cat – zeigt die gesamte Protokolldatei an
2) Anschließend wird diese Protokolldatei zur Verarbeitung an den Befehl grep übergeben, der nur „Blockiert“ ausgibt. Da es jedoch viele Nachrichten mit diesem Status gibt, muss sie an den Befehl more übergeben werden
3) mehr – notwendig für die seitenweise Anzeige von Daten

Diese Befehlsfolge wird als Übertragung in einem Kanal bezeichnet, wenn Daten von einem Befehl zur Verarbeitung an einen anderen übertragen werden, diese wiederum an einen anderen und so weiter, bis sie die gewünschte Form annehmen.

Mathematische Berechnungen

Der einfachste Weg, unter Linux zu rechnen, ist der Befehl bc.
In diesem Fall sollten Sie die Anzahl der Stellen nach dem Gleitkomma nicht mithilfe der Skalierung festlegen

#!/bin/bash
var1=45
var2=22
var3=`echo «scale=3; $var1/$var2" | v. Chr.`
echo $var3

Plutonit.ru - Administration, Konfiguration von Linux und Windows 2009 - 2018

Datenbankfehler: Tabelle „a111530_forumnew.rlf1_users“ existiert nicht

Startseite -> MyLDP -> E-Books auf Linux-Betriebssystem

Erstellen und Ausführen eines Skripts

Wir schreiben ein Skript und wählen einen Namen dafür

Ein Shell-Skript ist eine Folge von Befehlen, die Sie wiederholt verwenden können. Die Ausführung dieser Sequenz erfolgt üblicherweise durch Eingabe des Namens des Skripts in der Befehlszeile. Darüber hinaus können Sie mit cron Skripte verwenden, um Aufgaben zu automatisieren. Eine weitere Verwendung von Skripten ist das Verfahren zum Booten und Stoppen eines UNIX-Systems, wenn Vorgänge mit Daemons und Diensten in Init-Skripten definiert werden.

Um ein Shell-Skript zu erstellen, öffnen Sie eine neue, leere Datei in Ihrem Editor. Sie können hierfür einen beliebigen Texteditor verwenden: vim, Emacs, gedit, dtpad usw.; Jeder wird es tun. Sie können jedoch einen fortgeschritteneren Editor wählen, z vim oder Emacs, da solche Editoren so konfiguriert werden können, dass sie Shell- und Bash-Syntax erkennen, und eine gute Hilfe sein können, Fehler zu vermeiden, die Neulinge oft machen, wie zum Beispiel das Vergessen, Klammern zu schließen und Semikolons zu verwenden.

Geben Sie UNIX-Befehle wie in der Befehlszeile in eine neue, leere Datei ein. Wie im vorherigen Kapitel erläutert (siehe Abschnitt „Ausführen eines Befehls“), können Befehle Shell-Funktionen, integrierte Befehle, UNIX-Befehle oder andere Skripte sein.

Geben Sie Ihrem Skript einen mnemonischen Namen, der angibt, was das Skript tut. Stellen Sie sicher, dass Ihr Skriptname nicht mit vorhandenen Befehlen in Konflikt steht. Um Verwirrung zu vermeiden, enden Skriptnamen häufig mit der Erweiterung .sh. Es kann jedoch sein, dass es auf Ihrem System andere Skripte mit demselben Namen gibt, den Sie gewählt haben. Befehle verwenden welche, wo ist und andere, suchen Sie nach Informationen über bereits bestehende Programme und Dateien mit diesem Namen:

which -a Skriptname, wobei Skriptname ist, Skriptname suchen ( ca.

Skripte unter Linux schreiben (Lernen anhand von Beispielen)

: Geben Sie stattdessen den Namen Ihres Skripts an).

Skript script1.sh

In diesem Beispiel verwenden wir den Befehl Echo, in Bash integriert, das den Benutzer darüber informiert, was getan werden muss, bevor die Ausgabe erfolgt. Es wird dringend empfohlen, dass Benutzer über die Funktionsweise des Skripts informiert werden, damit Benutzer waren nicht nervös, wenn sie den Eindruck hatten, dass das Drehbuch nichts bewirkte. Wir werden auf das Thema der Benutzerbenachrichtigung in Kapitel 8, „Schreiben eines interaktiven Skripts“, zurückkommen.

Abb.2.1. Skript script1.sh

Schreiben Sie dasselbe Skript für sich. Eine gute Idee wäre, ein Verzeichnis zu erstellen, in dem Ihre Skripte gespeichert werden. Fügen Sie dieses Verzeichnis zum Inhalt der Variablen hinzu:

export PATH="$PATH:~/scripts"

Wenn Sie gerade erst mit Bash beginnen, verwenden Sie einen Texteditor, der Shells für verschiedene Konstrukte verwendet. verschiedene Farben. Syntaxhervorhebung wird in unterstützt vim, gvim, (x)emacs, kwrite und viele andere Editoren finden Sie in der Dokumentation Ihres bevorzugten Editors.

Ausführen des Skripts

Damit ein Skript ausgeführt werden kann, muss es über Ausführungsberechtigungen für die entsprechenden Benutzer verfügen. Überprüfen Sie nach dem Festlegen der Berechtigungen, ob Sie tatsächlich die erforderlichen Berechtigungen festlegen. Sobald dies erledigt ist, kann das Skript wie jeder andere Befehl ausgeführt werden:

willy:~/scripts> chmod u+x script1.sh willy:~/scripts> ls -l script1.sh -rwxrw-r— 1 willy willy 456 24. Dezember 17:11 script1.sh willy:~> script1.sh The Das Skript startet jetzt. Hallo Willy! Ich hole Ihnen jetzt eine Liste der verbundenen Benutzer: 15:38 Uhr, 18 Tage, 17:37 Uhr, 4 Benutzer, durchschnittliche Auslastung: 0,12, 0,22, 0,15 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty2 – Sa 14:00 Uhr 16:25 Uhr 0,24s 0,05s -bash willy:0 — Sa 14 Uhr ? 0,00s ? — willy pts/3 — Sa 14 Uhr 3:33 m 36,39 s 36,39 s BitchX willy ir willy pts/2 — Sa 14 Uhr 15:33 m 0,13 s 0,06 s /usr/bin/screen Ich stelle jetzt zwei Variablen ein. Das ist eine Zeichenfolge: schwarz Und das ist eine Zahl: 9 Ich gebe Ihnen jetzt Ihre Eingabeaufforderung zurück. willy:~/scripts> echo $COLOUR willy:~/scripts> echo $VALUE willy:~/scripts>

Dies ist die gebräuchlichste Art, ein Skript auszuführen. Es ist vorzuziehen, solche Skripte in einer Subshell auszuführen. In dieser Subshell erstellte Variablen, Funktionen und Aliase sind nur in dieser spezifischen Bash-Sitzung in dieser Subshell bekannt. Wenn diese Shell beendet wird und die übergeordnete Shell die Kontrolle übernimmt, werden alle Einstellungen gelöscht und alle vom Skript am Status dieser Shell vorgenommenen Änderungen werden vergessen.

Wenn Sie in der Variablen kein Verzeichnis oder (aktuelles Verzeichnis) angegeben haben, können Sie das Skript wie folgt aktivieren:

./script_name.sh

Es ist auch möglich, ein Skript innerhalb einer vorhandenen Shell auszuführen, dies geschieht jedoch normalerweise nur, wenn Sie spezielle Funktionen wünschen, z. B. wenn Sie testen möchten, ob ein Skript mit einer anderen Shell funktioniert, oder einen Trace für Debugging-Zwecke erstellen möchten ( ca.— Geben Sie stattdessen den Namen Ihres Skripts an):

rbash Skriptname.sh sh Skriptname.sh bash -x Skriptname.sh

Die angegebene Befehls-Shell wird als Sub-Shell Ihrer aktuellen Shell gestartet und führt das Skript aus. Dies geschieht, wenn Sie möchten, dass das Skript mit bestimmten Parametern oder unter bestimmten Bedingungen ausgeführt wird, die nicht im Skript selbst angegeben sind.

Wenn Sie keine neue Shell starten möchten, sondern das Skript in der aktuellen Shell ausführen möchten, verwenden Sie den Befehl:

Quellskriptname.sh

In diesem Fall benötigt das Skript keine Ausführungsrechte. Die Befehle werden im Kontext der aktuellen Shell ausgeführt, sodass alle an Ihrer Umgebung vorgenommenen Änderungen sichtbar bleiben, wenn die Ausführung des Skripts abgeschlossen ist:

willy:~/scripts> Quelle script1.sh – Ausgabe weggelassen – willy:~/scripts> echo $VALUE 9 willy:~/scripts>

Die Linux-Konsole ist ein Tool, mit dem Sie solche Manipulationen durchführen können, die die Befehlszeile in Windows nicht zulässt. Linux-Konsole, das ist das Markenzeichen von UNIX. Im heutigen Material geht es nicht darum, wie man Drehbücher schreibt, nein, ich werde Ihnen nicht beibringen, wie, was und warum. Wir werden uns eine kleine Auswahl nützlicher Skripte ansehen, die Sie jeden Tag verwenden können, um verschiedene Arten von Problemen zu lösen, zum Beispiel das Wetter für mehrere Tage im Voraus zu betrachten, Skripte für einen Webserver in einer Zeile, einen Bot für Twitter zu schreiben und ein Skript zum automatischen Starten jedes Torrent-Clients.

Dieses Material wurde nicht für Sie geschrieben, um sich mit Schamanismus zu beschäftigen. Ich ermutige Sie auf keinen Fall, in der Konsole zu sitzen und Hunderte von Zeichen einzugeben, um einige Aktionen auszuführen, die Sie in der grafischen Benutzeroberfläche nur ausführen können, indem Sie mit der Maus über das Element fahren, das Sie verwenden brauchen. Aber eines gibt es: Die grafische Oberfläche ist nicht immer vorhanden die beste Lösung, oft zur Lösung vieler Probleme, bewältigen die Konsole und Skripte die Aufgabe viel besser als Anwendungen mit grafische Oberfläche, wobei wir Skripte nicht vergessen sollten, da sie viele Routineaufgaben besser lösen als grafische Tools. Es ist auch erwähnenswert, dass Sie in jedem DE ein Symbol für Ihre Skripte erstellen können, indem Sie darauf klicken und diese einfach starten, ohne die Konsole öffnen zu müssen.

Beginnen wir mit einfachen Beispielen

Der folgende Befehl zeigt Ihnen Ihre externe IP an – dies ist ideal, wenn Sie über einen Router auf das Netzwerk zugreifen. Dieser Befehl ruft den ifconfig.co-Server auf, der die IP in einer Zeile zurückgibt, ohne unnötiges Schreiben, das Sie nicht benötigen.

Curl ifconfig.co

Ja, das ist kein Skript, das ist ein kleiner Befehl, aber wenn Sie diesen Befehl in ein Skript umwandeln möchten, müssen Sie ihn nur in eine Textdatei einfügen, am Ende erhalten wir ein kleines Bash-Skript:

#!/bin/bash curl ifconfig.co

Wir speichern das Skript im Verzeichnis ~/bin und vergeben Ausführungsrechte:

Chmod +x ~/bin/yourip.sh

Fast fertig, können Sie das Skript über die Befehlszeile mit dem Befehl yourip.sh ausführen.

Wir sind mit der IP fertig, schauen wir uns das Wetter über die Konsole an.

#!/bin/sh curl -4 wttr.in/Kiev

Mit diesem Skript können Sie einen Wetterbericht für vier Tage abrufen, in diesem Fall das Wetter für die Stadt Kiew.

#!/bin/sh dig +short txt $1.wp.dg.cx

Oben sehen Sie ein Beispiel, wie Sie auf Wikipedia eine kurze Beschreibung von etwas erhalten können. In unserem Fall verwenden wir eine DNS-Abfrage, anstatt den Webserver zu kontaktieren. Es ist auch sehr einfach, einen Webserver über die Konsole zu erstellen:

#!/bin/sh while (nc -l 80< file.html >:) ; Tun: ; Erledigt

Das obige Skript basiert auf dem Dienstprogramm netcat (nc), das oft als Schweizer Taschenmesser bezeichnet wird, da es Ihnen viele Tricks für den Netzwerkbetrieb ermöglicht. Das Skript ist einfach: Es startet eine Schleife, die den Befehl nc ausführt, der bereits Port 80 abhört und auf die Anfrage antwortet Datei.html, wodurch die übergebene Anfrage ins Nirgendwo gesendet wird (das Symbol bedeutet noop, also eine leere Operation).

Mit einfachen Skripten und Befehlen können Sie Internetradio hören:

#!/bin/sh mpv --volume=50 -playlist ~/16bit.fm_128.m3u

Zuvor müssen Sie natürlich die Radio-Playlist im M3U-Format von der Website des Radiosenders herunterladen. Wenn Sie MPlayer mit dem Argument starten -input-ipc-server=/tmp/mpvsocket, kann es durch das Schreiben von Befehlen in eine Datei gesteuert werden. Passen Sie beispielsweise die Lautstärke an:

Echo „Lautstärke +10“ | socat – /tmp/mpvsocket

Wir erstellen zwei Skripte: das erste zum Starten und das andere zum Stoppen des Radios (in die wir die Zeile killall mpv schreiben), hängen es dann auf den Desktop und richten zusammen die DE-Hotkeys zur Steuerung der Wiedergabe ein. Und das war's, Sie haben einen Player, mit dem Sie Internetradio hören können.

Wir haben uns vom Netzwerkbetrieb hinreißen lassen, kommen wir nun zu den lokalen.

#!/bin/sh tar -czf "../$(PWD##*/).tar.gz" .

Dieses Skript erstellt ein tar.gz-Archiv für das aktuelle Verzeichnis. Besonderes Augenmerk sollte auf die $(PWD##*/)-Konstruktion gelegt werden, die den gesamten Pfad zum aktuellen Verzeichnis (die $PWD-Variable) übernimmt und dann den ersten Teil bis zum letzten Schrägstrich entfernt, so dass nur der Verzeichnisname und übrig bleibt Hinzufügen der Erweiterung tar.gz. Wenn Sie weitere Informationen zu solchen Konstruktionen erfahren möchten, können Sie diese lesen, indem Sie den Befehl man bash in der Konsole ausführen.

#!/bin/sh while true; Führen Sie inotifywait -r -e MODIFY DIRECTORY && YOUR_COMMAND aus, fertig

Das obige Skript führt einen Befehl als Reaktion auf Änderungen an Dateien in einem Verzeichnis aus. Sie können es für verschiedene Zwecke verwenden, beispielsweise zum automatischen Einschalten des Players beim Speichern von MP3. Oder zeigen Sie beispielsweise mit dem Befehl notify-send eine Benachrichtigung auf dem Desktop an:

Benachrichtigen-senden „Datei geändert“

Für den Desktop

Unten sehen Sie ein Beispiel für ein Skript, das zufällige Hintergrundbilder lädt, die auf dem Wallpaper-Reddit-Kanal veröffentlicht werden:

#!/bin/bash wget -O - http://www.reddit.com/r/wallpaper |\ grep -Eo "http://i.imgur.com[^&]+jpg" |\ shuf -n 1 |\ xargs wget -O Hintergrund.jpg feh --bg-fill Hintergrund.jpg

Es funktioniert alles ganz einfach. Mit dem Dienstprogramm wget lädt das Skript die Seite www.reddit.com/r/wallpaper herunter und übergibt sie dann an grep, das bereits nach Links zu imgur sucht, mit shuf einen zufälligen auswählt, ihn mit wget herunterlädt und als festlegt Erstellen Sie mit dem Befehl feh ein Hintergrundbild für Ihren Desktop (dies ist ein Miniaturbildbetrachter, der zuerst installiert werden muss). Sie können dieses Skript wie oben beschrieben zu einer normalen Textdatei hinzufügen, es im SH-Format speichern, ausführbar machen, ein Symbol hinzufügen und es vom Desktop aus ausführen, indem Sie darauf klicken, und Ihr Hintergrundbild ändert sich.

#!/bin/sh state=`synclient | grep TouchpadOff | cut -d "=" -f 2` if [ $state = "1" ]; dann synclient TouchpadOff=0 sonst synclient TouchpadOff=1 fi

Das obige Skript wird zum Aktivieren und Deaktivieren des Touchpads Ihres Laptops verwendet: Aktivieren Sie es, wenn es deaktiviert ist, und umgekehrt. Für den korrekten Betrieb wird das Dienstprogramm synclient verwendet, mit dem Sie Touchpads steuern können, die größtenteils von Synaptics hergestellt werden. Dies ist zu 90 % möglich, sogar noch mehr. Nach dem Start zeigt das Dienstprogramm viele Informationen an, einschließlich der Zeile TouchpadOff = 1, wenn es aktiviert ist, und TouchpadOff = 2, wenn es deaktiviert ist. Das Skript liest diese Werte und aktiviert oder deaktiviert es je nach Zustand des Touchpads.

!#/bin/bash mpv tv:// -frames 3 -vo jpeg mv 00000003.jpg photo.jpg rm -f 0000*.jpg

Mit dem obigen Skript können Sie mit Ihrer Webcam ein Foto aufnehmen. Das Skript verwendet einen MPV-Videoplayer, der die ersten drei von der Kamera aufgenommenen Bilder aufzeichnet JPEG-Dateien Format mit den Namen 0000000.jpg, 00000002.jpg, 00000003.jpg usw., danach wird das dritte Bild in die Datei photo.jpg umbenannt und der Rest gelöscht. Wofür werden drei Bilder verwendet? Sie werden nur benötigt, damit Ihre Kamera Zeit zum Initialisieren hat; wenn Sie die ersten beiden Bilder verwenden, erhalten Sie in der Regel ein schwarzes Bild. Es gibt auch Vorfälle bei der Positionierung, das Foto kann auf dem Kopf stehen; Um dies zu vermeiden, muss mpv mit dem Flip-Flag -vf gestartet werden:

Mpv tv:// -frames 3 -vf flip -vo jpeg

Mit demselben Befehl können Sie eine Überwachungskamera erstellen, die nur dann Bilder aufnimmt, wenn der Benutzer die Maus berührt:

#!/bin/bash while true; Führen Sie Sudo cat /dev/input/mouse0 | aus read -n1 mpv tv:// -frames 3 -vo jpeg mv 00000003.jpg `date +%F-%H-%M`.jpg rm -f 0000*.jpg sleep 10 fertig

Das obige Skript verwendet eine Endlosschleife und ruft Daten vom Gerät /dev/input/mouse0 ab. Wenn Daten vorhanden sind, bedeutet dies, dass die Maus bewegt oder eine ihrer Tasten gedrückt wurde. Anschließend werden mit mpv drei Snapshots erstellt, der dritte Snapshot erhält den Namen des aktuellen Datums und die ersten beiden werden gelöscht.

Wenn Sie ein vollwertiges Video von einer Webcam aufnehmen möchten, können Sie ein ähnliches Skript als Beispiel verwenden:

#!/bin/bash mencoder tv:// -tv drivers=v4l2:width=800:height=600:device=/dev/video0:fps=30:outfmt=yuy2:forceaudio:alsa:advice=hw.2, 0 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800 -ffourcc xvid -oac mp3lame -lameopts cbr=128 -o video.avi

Als Ergebnis erhalten Sie eine Datei namens video.avi im MPEG4-Format, Bitrate 1800, und eine Audiodatei im MP3-Format mit Bitrate 128.

#!/bin/bash ffmpeg -f x11grab -r 25 -s 1366x768 -i:0.0 screencast.mpg

Mit dem obigen Skript können Sie einen vollständigen Screencast aufzeichnen. 1366×768 ist die Desktop-Auflösung, Sie können sie an Ihre Bedürfnisse anpassen. Um einen Screenshot eines einzelnen Fensters zu erstellen, können Sie den Importbefehl verwenden:

Screenshot.png importieren

Wenn Sie den obigen Befehl ausführen, ändert sich das Symbol Ihres Mauszeigers in ein Kreuz, mit dem Sie wie beim Aufnehmen von Screenshots einen Bereich des Bildschirms auswählen können Anwendungen von Drittherstellern oder Erweiterungen. Wenn Sie diesen Befehl an einen der Hotkeys anhängen, erhalten Sie ein nahezu ideales System zum Erstellen von Screenshots, und diese Kombination wird Sie nicht verschlingen RAM, was ein großes Plus darstellt.

Sie können einen externen Monitor auch über die Konsole konfigurieren:

#!/bin/sh if [ -z "$1" ]; then beende fi if [ $1 == "off" ]; then xrandr --output VGA-0 --off xrandr -s 0 else if [ $1 == "on"]; dann xrandr --output LVDS --auto --primary --output VGA-0 --auto --left-of LVDS xrandr --newmode "1920x1080" 173,00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync xrandr -- addmode VGA-0 1920x1080 xrandr --output VGA-0 --mode 1920x1080 fi xrandr --dpi 96

Dieses Skript basiert auf der Tatsache, dass der Hauptmonitor den Namen LVDS und der externe Monitor den Namen VGA-0 trägt. Das Standardsituation für alle Laptops; Wenn Sie sich nicht sicher sind, können Sie dies überprüfen, indem Sie den Befehl xrandr ausführen: wenn Sie ein Argument an das Skript übergeben aus Es deaktiviert den externen Monitor, Argument An, wiederum schließt es ein und platziert es auf der linken Seite des Hauptarguments (Argument). -links-vonLVDS in der ersten Mannschaft). Anschließend erstellt das Skript eine neue Konfiguration für den Monitor mit einer Auflösung von 1920 x 1080 und aktiviert diesen. Und schließlich legt das Skript den Standard-DPI-Wert fest – da es beim Anschließen eines Monitors mit einer anderen Auflösung häufig abstürzt.

In den meisten Fällen die Befehle xrandr -newmode... Und xrandr -addmode... werden nicht benötigt, da Xorg die Monitorkonfiguration und Auflösung über die EDID erhält. Manchmal geschieht dies jedoch nicht und die Konfigurationszeichenfolge wird nach dem Argument angegeben -newmode, müssen Sie es selbst mit dem cvt-Tool generieren:

CVT 1920 1080

Mit dem CVT-Tool können Sie benutzerdefinierte Auflösungen generieren, die vom Standardmonitor nicht unterstützt werden.

Durchsuchen Sie Google über die Befehlszeile

Kehren wir noch einmal zu den Netzwerkdiensten zurück. Wie erhalte ich die Top-10-Suchergebnisse bei Google? Schauen Sie sich das folgende Skript an:

#!/bin/bash Q=" " URL="https://www.google.de/search?tbs=li:1&q=" AGENT="Mozilla/4.0" stream=$(curl -A "$AGENT" -skLm 10 "$(GOOG_URL)$(Q//\ /+)" | grep -oP "\/url\?q=.+?&" | sed "s|/url?q=||; s| &||") echo -e "$(stream//\%/\x)"

Dieses Skript sendet mithilfe von Curl eine Anfrage an Google und ersetzt Leerzeichen in der Suchzeichenfolge durch Pluszeichen. Dann werden im Antwort-HTML Links angezeigt

Beispiel mit dem YouTube-Dienst:

#!/bin/bash mpv -fs -quiet `youtube-dl -g "$1"`

Das Skript aus dem obigen Beispiel spielt ein Video mit der im Argument angegebenen ID mit einem MPV-Player ab. Sie müssen youtube-dl im Voraus installieren.

Mehrere Beispiele für die Arbeit mit Twitter. Unten sehen Sie ein Skript für einen vollwertigen Bot, der einen Befehl als Eingabe akzeptiert, ihn mithilfe des Befehlsinterpreters ausführt und das Ergebnis an den angegebenen Benutzer sendet.

#!/bin/bash USER="Ihr Spitzname" while true; do CMD=`echo "/dma +1" | ttytter-script | sed "s/\[.*\]\ //" if [ $CMD != $OLD_CMD ]; then REPL=`$CMD` echo "/dm $USER $(REPL:0:140)" | ttytter -script CMD = $OLD_COMD fi sleep 60 fertig

Das Skript verwendet den ttytter-Konsolenclient, liest den letzten Direktnachrichtenwert aus der Schleife und prüft dann, ob dieser Befehl ausgeführt wurde. Wenn nicht, führt es ihn aus und sendet ihn an den angegebenen Benutzer mit der USER-Variablen, wobei bis zu 140 Zeichen abgeschnitten werden .

Damit alles funktioniert, müssen Sie das Dienstprogramm ttytter installieren, ausführen, dann den generierten Link von der Konsole kopieren und dort einfügen Adressleiste Browser, gehen Sie die Bestätigung durch, stimmen Sie zu, holen Sie sich dann den Authentifizierungsschlüssel, kopieren Sie ihn und fügen Sie ihn in die Konsole in ttytter ein. Zuvor empfiehlt es sich natürlich, einen separaten Benutzer hinzuzufügen und sich unter seinem Konto anzumelden.

Sie können Twitter nicht nur zum Erstellen eines Bots verwenden, sondern auch zum Überwachen Ihres Computers. Das folgende Skript sendet eine Nachricht an den Feed mit Informationen über den Zustand der Maschine (Hostname, Betriebszeit, Auslastung, freier Speicher und CPU-Last):

#!/bin/bash HOST=`hostname -s` UP=`uptime | schneiden -d" " -f4,5 | cut -d"," -f1` LOAD=`uptime | cut -d=" -f5,6` MEM=`ps aux | awk "( sum += $4 ); END ( print sum )"` CPU=`ps aux | awk "( sum += $3 ); END ( print sum )"` tweet="Host: $(HOST), Betriebszeit: $(UP), CPU: $(CPU)%, Speicher: $(MEM)%, Loadavg $(LOAD)" if [ $(echo "$(tweet)" | wc -c) -gt 140 ]; dann echo „FATAL: Der Tweet ist länger als 140 Zeichen!“ Exit 1 fi echo $tweet | ttytter-Skript

Schauen Sie sich abschließend das folgende Skript an. Dieses Skript wird zum Starten und Stoppen des Torrent-Clients verwendet, während Ihr PC im Leerlauf ist:

#!/bin/bash IDLE=600000 STOPCMD="transmission-remote -S" STARTCMD="transmission-remote -s" STOPPED="yes" while true; tun, wenn [ `xprintidle` -gt $IDLE ]; then if [ $STOPPED = "yes" ]; then $STARTCMD STOPPED="no" fi else if [ $STOPPED = "no" ]; dann $STOPCMD STOPPED="yes" fi fi sleep 60 fertig

Jede Minute geht das Skript in eine Endlosschleife und prüft, wie viel Zeit in Millisekunden vergangen ist, seit der Benutzer die letzte Aktion ausgeführt hat (für diese Zwecke wird xprintidle verwendet). Wenn 600.000 ms (zehn Minuten) vergangen sind, führt das Skript den in der Variablen STARTCMD angegebenen Befehl aus. Andernfalls wird der Befehl STOPCMD ausgeführt, jedoch nur, wenn zuvor STARTCMD ausgeführt wurde. Wenn du es erklärst in einfacher Sprache, Sie tun zehn Minuten lang nichts am Computer, dann wird STARTCMD gestartet, in unserem Fall ist dies der Befehl, der alle Downloads in Transmission startet, andernfalls werden alle Downloads angehalten. Gefällt Ihnen der Transmission-Client nicht? Wir verwenden Befehle für Deluge, siehe unten:

STOPCMD="Deluge-Console-Pause \*" STARTCMD="Deluge-Console-Fortsetzung \*"

Abschluss