Sie erwähnen nicht, welche Shell Sie verwenden möchten, also nehme ich bash an, obwohl dies bei allen Shells ziemlich übliche Dinge sind.
Datei Argumente
Auf Argumente kann über die Variablen zugegriffen werden $1
- $n
( $0
gibt den Befehl zurück, der zum Ausführen des Programms verwendet wird). Angenommen, ich habe ein Skript, das nur cat
n Dateien mit einem Trennzeichen dazwischen enthält:
#!/usr/bin/env bash
#
# Parameters:
# 1: string delimiter between arguments 2-n
# 2-n: file(s) to cat out
for arg in ${@:2} # $@ is the array of arguments, ${@:2} slices it starting at 2.
do
cat $arg
echo $1
done
In diesem Fall übergeben wir einen Dateinamen an cat. Wenn Sie jedoch die Daten in der Datei transformieren möchten (ohne sie explizit zu schreiben und neu zu schreiben), können Sie den Dateiinhalt auch in einer Variablen speichern:
file_contents=$(cat $filename)
[...do some stuff...]
echo $file_contents >> $new_filename
Lesen Sie von stdin
Was das Lesen von stdin read
angeht, haben die meisten Shells einen ziemlich standardmäßigen Aufbau, obwohl es (zumindest) Unterschiede in der Art und Weise gibt, wie Eingabeaufforderungen angegeben werden.
Die Manpage von Bash builtins hat eine ziemlich knappe Erklärung read
, aber ich bevorzuge die Seite von Bash Hackers .
Einfach:
read var_name
Mehrere Variablen
Um mehrere Variablen festzulegen, geben Sie einfach mehrere Parameternamen an read
:
read var1 var2 var3
read
Setzt dann ein Wort von stdin in jede Variable, wobei alle verbleibenden Wörter in die letzte Variable geschrieben werden.
λ read var1 var2 var3
thing1 thing2 thing3 thing4 thing5
λ echo $var1; echo $var2; echo $var3
thing1
thing2
thing3 thing4 thing5
Wenn weniger Wörter als Variablen eingegeben werden, sind die verbleibenden Variablen leer (auch wenn sie zuvor festgelegt wurden):
λ read var1 var2 var3
thing1 thing2
λ echo $var1; echo $var2; echo $var3
thing1
thing2
# Empty line
Eingabeaufforderungen
Ich benutze -p
flag oft für eine Eingabeaufforderung:
read -p "Enter filename: " filename
Hinweis: ZSH und KSH (und möglicherweise auch andere) verwenden für Eingabeaufforderungen eine andere Syntax:
read "filename?Enter filename: " # Everything following the '?' is the prompt
Standardwerte
Das ist kein wirklicher read
Trick, aber ich benutze ihn oft in Verbindung mit read
. Zum Beispiel:
read -p "Y/[N]: " reply
reply=${reply:-N}
Wenn die Variable (reply) vorhanden ist, geben Sie sich selbst zurück. Wenn sie leer ist, geben Sie den folgenden Parameter zurück ("N").