Sie erwähnen nicht, welche Shell Sie verwenden möchten, also gehe ich von bash aus, obwohl dies ziemlich üblich ist.
Dateiargumente
Auf Argumente kann über die Variablen zugegriffen werden $1
- $n
( $0
gibt den Befehl zurück, mit dem das Programm ausgeführt wird). Angenommen, ich habe ein Skript, das nur cat
eine Anzahl von Dateien mit einem Trennzeichen zwischen ihnen aussieht:
#!/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 die Daten in der Datei umwandeln möchten (ohne sie explizit zu schreiben und umzuschreiben), können Sie den Dateiinhalt auch in einer Variablen speichern:
file_contents=$(cat $filename) [...do some stuff...] echo $file_contents >> $new_filename
Aus stdin lesen
Was das Lesen von stdin read
angeht, haben die meisten Shells einen ziemlich standardmäßigen Standard, obwohl es Unterschiede gibt, wie die Eingabeaufforderungen (zumindest) angegeben werden.
Die Manpage von Bash builtins hat eine ziemlich kurze 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
fügt dann ein Wort aus stdin in jede Variable ein und speichert alle verbleibenden Wörter in die letzte Variable.
λ 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 verwende -p
Flag häufig für eine Eingabeaufforderung:
read -p "Enter filename: " filename
Hinweis: ZSH und KSH (und möglicherweise andere) verwenden eine andere Syntax für Eingabeaufforderungen:
read "filename?Enter filename: " # Everything following the '?' is the prompt
Standardwerte
Das ist nicht wirklich ein read
Trick, aber ich benutze es oft in Verbindung mit read
. Zum Beispiel:
read -p "Y/[N]: " reply reply=$
Wenn die Variable (Antwort) vorhanden ist, geben Sie sich selbst zurück. Wenn jedoch leer ist, geben Sie den folgenden Parameter ("N") zurück.