Vous ne mentionnez pas le shell que vous comptez utiliser, alors je suppose que bash, bien que ce soient des choses assez standard pour tous les obus.
Arguments de fichier
Les arguments sont accessibles via les variables $1
- $n
( $0
retourne la commande utilisée pour exécuter le programme). Supposons que j’ai un script qui cat
contient un nombre n de fichiers avec un séparateur entre eux:
#!/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
Dans ce cas, nous passons un nom de fichier à cat. Toutefois, si vous souhaitez transformer les données du fichier (sans les écrire ni les réécrire explicitement), vous pouvez également stocker le contenu du fichier dans une variable:
file_contents=$(cat $filename)
[...do some stuff...]
echo $file_contents >> $new_filename
Lire de stdin
En ce qui concerne stdin, la plupart des interpréteurs ont un standard assez read
intégré, bien qu'il existe des différences dans la manière dont les invites sont spécifiées (au moins).
La page de manuel de Bash builtins contient une explication assez concise read
, mais je préfère la page Bash Hackers .
Simplement:
read var_name
Plusieurs variables
Pour définir plusieurs variables, indiquez simplement plusieurs noms de paramètres read
:
read var1 var2 var3
read
placera ensuite un mot de stdin dans chaque variable, vidant tous les mots restants dans la dernière variable.
λ read var1 var2 var3
thing1 thing2 thing3 thing4 thing5
λ echo $var1; echo $var2; echo $var3
thing1
thing2
thing3 thing4 thing5
Si moins de mots sont entrés que de variables, les variables restantes seront vides (même si elles avaient été définies précédemment):
λ read var1 var2 var3
thing1 thing2
λ echo $var1; echo $var2; echo $var3
thing1
thing2
# Empty line
Instructions
J'utilise -p
souvent flag pour une invite:
read -p "Enter filename: " filename
Remarque: ZSH et KSH (et peut-être d'autres) utilisent une syntaxe différente pour les invites:
read "filename?Enter filename: " # Everything following the '?' is the prompt
Les valeurs par défaut
Ce n'est pas vraiment une read
ruse, mais je l'utilise beaucoup en conjonction avec read
. Par exemple:
read -p "Y/[N]: " reply
reply=${reply:-N}
En gros, si la variable (réponse) existe, retourne elle-même, mais si est vide, retourne le paramètre suivant ("N").