[LINUX] Ich werde nie vergessen, wie man ein Shell-Skript schreibt, nicht vergessen! !!

Was ist das

Shell-Skript ist praktisch, nicht wahr? Aber ** ich vergesse wie man es schreibt ** Ich bin faul, Google Sensei von Befehl zu Befehl zu fragen, daher fasse ich zusammen, wie man es schreibt.

Shell Art ist kein Level-Artikel, aber es ist ein nützlicher Artikel, wenn Sie ein kleines Skript schreiben. vielleicht.

Es ist ein ungewöhnlicher und chaotischer Eintrag, aber keine Sorge.

Grundlagen

Von nun an werde ich über die grundlegende Syntax von Shell-Skripten schreiben. Ernsthaft einfache Syntax.

Ausführungsberechtigung

Es ist leicht zu vergessen, aber lassen Sie uns zuerst Autorität geben. Wenn Sie dies nicht tun, können Sie es nicht tun.

(*'~') $ touch sample.sh
(*'~') $ chmod +x ./sample.sh

Erklärung

Vergessen Sie nicht, die Deklaration in die erste Zeile zu setzen * dies ist ein Shell-Skript *. Es gibt keinen Unterschied zwischen sh und bash, also scheint bash in Ordnung zu sein.

#!/bin/bash

Auskommentieren

Sie möchten den Kommentar wissen. Fügen Sie am Anfang einfach "#" hinzu.

(*'~') $ cat sample.sh  
#!/bin/bash

# echo "not display"
echo "display"
(*'~') $ ./sample.sh     
display

Streit

Ich werde zusammenfassen, wie man Argumente und Variablen schreibt

Wie man Argumente nimmt

Es ist schnell zu schreiben und sich zu erinnern. Die Verwendung des Arguments kann wie im folgenden Skript beschrieben werden. Dies bedeutet, dass es sich um eine Variable mit "$" handelt.

(*'~') $ cat sample.sh 
#!/bin/bash

echo $#
echo $@
echo "$@"
echo $*
echo "$*"
echo $0
echo $1
echo $2
echo $9

Wenn Sie ein Argument als Versuch angeben, sieht es so aus.

(*'~') $ ./sample.sh hoge 1    
2
hoge 1
hoge 1
hoge 1
hoge 1
./sample.sh
hoge
1

(*'~') $ 

Erläuterung --$ #: Anzahl der an das Skript übergebenen Argumente --$ @: Alle an das Skript übergebenen Argumente. --$ *: Alle an das Skript übergebenen Argumente. Entspricht "$ @", sofern es nicht von einer Doppelbeschichtung umgeben ist. -- $ 0: Der Name des ausgeführten Skripts. -- $ n: Das n-te Argument, das an das Skript übergeben wurde. Gibt ein Leerzeichen aus, wenn der Bereich des angegebenen Arguments überschritten wird. Das 10. und die nachfolgenden Argumente können nur erweitert werden, wenn sie als "$ {n}" beschrieben werden.

Unterschied zwischen $ @ und $ *

Wenn Sie es nicht mit doppelter Vorsicht einschließen, ist es dasselbe wie $ @, aber wenn Sie es einschließen, gibt es einen Unterschied zwischen der Ausgabe für jedes Argument oder der Ausgabe mit einem Argument, wie unten gezeigt.

(*'~') $ cat sample.sh 
#!/bin/bash
for arg in "$@"
    do
      echo $arg
	done

for arg in "$*"
    do
      echo $arg
    done
(*'~') $ ./sample.sh hoge foo 1
hoge
foo
1
hoge foo 1

Variable

Ich habe es bereits als Argument geschrieben, aber wenn ich auf eine Variable verweise, wird $ hinzugefügt. Beim Definieren nicht hinzufügen. Beachten Sie außerdem, dass ** beim Definieren von Variablen ** keine Leerzeichen links und rechts von = setzen. Lassen Sie uns verbinden und schreiben.

(*'~') $ cat ./sample.sh 
#!/bin/bash

hoge="This is Hoge"
echo $hoge
(*'~') $ ./sample.sh    
This is Hoge

Variable Erweiterung

Erweitern Sie Variablen in einer Zeichenfolge. Schreiben Sie einfach Variablen in Doppelbeschichtung.

(*'~') $ cat ./sample.sh
#!/bin/bash

hoge="This is Hoge"
echo "What is this? $hoge"

(*'~') $ ./sample.sh   
What is this? This is Hoge

Ergebnis der Befehlsausführung

Das Ergebnis der Befehlsausführung kann in einer Variablen gespeichert werden. Beschreiben Sie den Befehl, den Sie ausführen möchten, in $ ().

(*'~') $ cat ./sample.sh
#!/bin/bash

hoge=$(echo "This is Hoge")
echo "What is this? $hoge"

(*'~') $ ./sample.sh   
What is this? This is Hoge

Bedingte Verzweigung

Wie ich etwas früher geschrieben habe, werde ich beschreiben, wie man if-, for- und case-Anweisungen schreibt.

if Anweisung

Ich werde es auf jeden Fall benutzen. Ich habe eine kleine Angewohnheit. Es gibt Vergleichsoperatoren wie "-n" und "-z", aber es ist ziemlich verwirrend, daher denke ich, dass es einfacher ist, einen Vergleich wie "" = "$ hoge" "durchzuführen. Übrigens ** Stellen Sie sicher, dass Sie die Variable in Doppelmantel einschließen und als Zeichenfolge vergleichen **

(*'~') $ cat sample.sh 
#!/bin/bash

if [ "" = "$1" ]; then
  echo "params not given"
fi

if [ "" != "$1" ]; then
  echo "params given $1"
fi
(*'~') $ ./sample.sh 
params not given
(*'~') $ ./sample.sh hoge
params given hoge

if ~ else Dies ist eine weitere häufig verwendete Syntax. Vergiss jedes Mal "elif".

(*'~') $ cat sample.sh   
#!/bin/bash

if [ "hoge" = "$1" ]; then
  echo "params is hoge"
elif [ "foo" = "$1"  ]; then
  echo "params is foo"
else
  echo "params are not hoge or foo"
fi
(*'~') $ ./sample.sh hoge
params is hoge
(*'~') $ ./sample.sh foo 
params is foo
(*'~') $ ./sample.sh other
params are not hoge or foo

for Anweisung

Ich habe es ein bisschen früher gemacht

(*'~') $ cat sample.sh 
#!/bin/bash

for arg in "$@"
    do
      echo $arg
    done
(*'~') $ ./sample.sh hoge foo 1
hoge
foo
1

case Aussage

Ich benutze es nüchtern

(*'~') $ cat sample.sh    
#!/bin/bash

case "$1" in
      hoge)
        echo "params is hoge"
        ;;
      foo)
        echo "params is foo"
        ;;
      *)
        echo "params are not hoge or foo"
        ;;
    esac
(*'~') $ ./sample.sh hoge 
params is hoge
(*'~') $ ./sample.sh foo 
params is foo
(*'~') $ ./sample.sh other
params are not hoge or foo

Hier dokumentieren

Hier Dokument, das nüchtern und bequem ist. Natürlich können Sie es in der Shell verwenden. Wenn Sie den ersten EOS-Teil mit einer einzigen Warnung einschließen, wird die Variable nicht erweitert. EOS kann übrigens alles sein, solange das erste und das letzte Zeichen ausgerichtet sind. Als Konvention, wenn alle Großbuchstaben.

(*'~') $ cat sample.sh   
#!/bin/bash

cat << EOS
    you can discribe multiple lines.
    $1
EOS

cat << 'EOS'
    $1
EOS
(*'~') $ ./sample.sh hoge
    you can discribe multiple lines.
    hoge
    $1

Verarbeitung beenden

Geben Sie dem Befehl exit eine Nummer, um das Skript vorzeitig zu beenden. "0" ist eine normale Beendigung und "1" ist eine abnormale Beendigung. Es wird hauptsächlich verwendet, um die Verarbeitung zu stoppen, wenn nicht genügend Argumente vorhanden sind.

(*'~') $ cat sample.sh 
#!/bin/bash

case "$1" in
      0)
        echo "success"
		exit 0
        ;;
      *)
        echo "error"
		exit 1
        ;;
    esac

echo "can't reach"
(*'~') $ ./sample.sh 0
success
(*'~') $ ./sample.sh 1
error

Zusammenfassung

Wie wäre es mit so etwas?

Ich habe keinen Eintrag gefunden, der systematisch beschrieben wurde (wahrscheinlich nicht leicht zu finden), also habe ich ihn geschrieben. Schließlich habe ich das Gefühl, etwas zu verstehen, wenn ich es selbst schreibe.

Wir werden zu einem späteren Zeitpunkt eine erweiterte Version hinzufügen.

Recommended Posts

Ich werde nie vergessen, wie man ein Shell-Skript schreibt, nicht vergessen! !!
[Ubuntu] So führen Sie ein Shell-Skript aus
Erstellen eines Shell-Skripts zum Schreiben eines Tagebuchs
Ein Shell-Skript, um sich wieder an die pipenv-Shell zu erinnern
Qiita (1) Wie schreibe ich einen Codenamen?
So führen Sie Maya Python-Skripte aus
Ein Memorandum darüber, wie man Pandas schreibt, das ich persönlich oft vergesse
So schreiben Sie einen ShellScript Bash für Anweisung
Wie man sich erinnert, wenn man ein Wort vergisst
Schreiben Sie ein Skript, um einen MySQL-Dump in TSV zu konvertieren
Wie schreibe ich ein benanntes Tupeldokument im Jahr 2020?
[Go] So schreiben oder rufen Sie eine Funktion auf
Schreiben wir ein entsprechendes Ping-Bestätigungsskript
So schreiben Sie eine ShellScript-Bash-Case-Anweisung
So schreiben Sie eine GUI mit dem Befehl maya
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
[Python] So schreiben Sie eine Dokumentzeichenfolge, die PEP8 entspricht
So erstellen Sie ein einfaches TCP-Server / Client-Skript
XPath-Grundlagen (2) - So schreiben Sie XPath
[Linux] Kopieren Sie Daten mit einem Shell-Skript von Linux nach Windows
So rufen Sie eine Funktion auf
Versuchen wir es mit einem Shell-Skript
So schreiben Sie einen Test für die Verarbeitung mit BigQuery
Wie man ein Terminal hackt
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
[Linux] Schreiben Sie ein Bereitstellungstool mit rsync und einem Shell-Skript
Schreiben Sie ein Skript in Shell und Python, um Sie in Slack zu benachrichtigen, wenn der Vorgang abgeschlossen ist
Übergeben von Argumenten an Python-Skripte in SPSS Modeler Batch
Bedingte Verzweigung aufgrund des Vorhandenseins einer Shell-Skriptdatei
Erstellen Sie ein Shell-Skript, um die Python-Datei mehrmals auszuführen
Schreiben Sie ein Skript, um die Entfernung mit dem Elasticsearch 5-System schmerzfrei zu berechnen
So schreiben Sie eine Dokumentzeichenfolge, um ein benanntes Tupeldokument mit Sphinx zu erstellen
Wie erstelle ich eine japanisch-englische Übersetzung?
So setzen Sie einen symbolischen Link
Wie man nüchtern mit Pandas schreibt
Wiederverwendung von Flaschen Wie schreibe ich HTML?
Wie man einen lockeren Bot macht
So erstellen Sie ein Conda-Paket
Schreiben Sie die Standardausgabe in eine Datei
Wie erstelle ich einen Crawler?
So erstellen Sie eine rekursive Funktion
Wie erstelle ich eine Docker-Datei?
[Blender] So erstellen Sie ein Blender-Plug-In
So löschen Sie einen Docker-Container
So schreiben Sie ein Docker-Basis-Image
Wie schreibe ich Django1.9 umweltunabhängig wsgi.py
Wie erstelle ich einen Crawler?
Hinweise zum Schreiben von require.txt
So erstellen Sie eine Konfigurationsdatei
Schreiben Sie ein Batch-Skript mit Python3.5 ~
Überlegen Sie, wie Sie einen Filter mit den Shotgun API-Contact-Versionen schreiben
So schreiben Sie eine Zeichenfolge, wenn Python mehrere Zeilen enthält
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
[Blender] So legen Sie shape_key mit dem Skript fest
So erstellen Sie einen Klon aus Github
So erstellen Sie eine Sphinx-Übersetzungsumgebung
So erstellen Sie einen Git-Klonordner
Wie man optuna einstellt (wie man einen Suchraum schreibt)