Non dici quale shell intendi utilizzare, quindi suppongo bash, anche se queste sono cose piuttosto standard tra le shell.
Argomenti dei file
È possibile accedere agli argomenti tramite le variabili $1
- $n
( $0
restituisce il comando utilizzato per eseguire il programma). Supponiamo di avere uno script che ha appena cat
pubblicato n numero di file con un delimitatore tra di loro:
#!/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 questo caso, stiamo passando un nome di file a cat. Tuttavia, se si desidera trasformare i dati nel file (senza scriverli e riscriverli in modo esplicito), è possibile anche archiviare il contenuto del file in una variabile:
file_contents=$(cat $filename)
[...do some stuff...]
echo $file_contents >> $new_filename
Leggi da stdin
Per quanto riguarda la lettura da stdin, la maggior parte delle shell ha un read
builtin piuttosto standard , anche se ci sono differenze nel modo in cui vengono specificati i prompt (almeno).
La pagina man di Bash builtins ha una spiegazione piuttosto concisa di read
, ma preferisco la pagina di Bash Hackers .
Semplicemente:
read var_name
Variabili multiple
Per impostare più variabili, basta fornire più nomi di parametri per read
:
read var1 var2 var3
read
inserirà quindi una parola da stdin in ciascuna variabile, scaricando tutte le parole rimanenti nell'ultima variabile.
λ read var1 var2 var3
thing1 thing2 thing3 thing4 thing5
λ echo $var1; echo $var2; echo $var3
thing1
thing2
thing3 thing4 thing5
Se vengono inserite meno parole delle variabili, le variabili rimanenti saranno vuote (anche se precedentemente impostate):
λ read var1 var2 var3
thing1 thing2
λ echo $var1; echo $var2; echo $var3
thing1
thing2
# Empty line
prompt
Uso -p
flag spesso per un prompt:
read -p "Enter filename: " filename
Nota: ZSH e KSH (e forse altri) usano una sintassi diversa per i prompt:
read "filename?Enter filename: " # Everything following the '?' is the prompt
Valori standard
Questo non è davvero un read
trucco, ma lo uso molto insieme a read
. Per esempio:
read -p "Y/[N]: " reply
reply=${reply:-N}
Fondamentalmente, se la variabile (risposta) esiste, restituisce se stessa, ma se è vuota, restituisce il seguente parametro ("N").