Vous ne mentionnez pas quel Shell vous prévoyez d'utiliser, donc je vais supposer bash, bien que ces choses soient assez standard dans tous les shells.
Arguments pour les fichiers
Les arguments sont accessibles via les variables $1
- $n
( $0
renvoie la commande utilisée pour exécuter le programme). Disons que j'ai un script qui ne fait que cat
sort un nombre n de fichiers avec un délimiteur 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 et 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 à partir de stdin
En ce qui concerne la lecture de stdin, la plupart des shells ont une fonction assez standard read
bien qu'il y ait des différences dans la façon dont les invites sont spécifiées (au minimum).
El Page de manuel de Bash builtins a une explication assez concise de read
mais je préfère le Hackers du Bash page.
Tout simplement :
read var_name
Variables multiples
Pour définir plusieurs variables, il suffit de fournir plusieurs noms de paramètres à la commande read
:
read var1 var2 var3
read
placera alors un mot de stdin dans chaque variable, en 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 le nombre de mots saisis est inférieur au nombre de variables, les variables restantes seront vides (même si elles ont été définies précédemment) :
read var1 var2 var3
thing1 thing2
echo $var1; echo $var2; echo $var3
thing1
thing2
# Empty line
Prompts
J'utilise -p
souvent le drapeau 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
Valeurs par défaut
Ce n'est pas vraiment un read
mais je l'utilise beaucoup en conjonction avec read
. Par exemple :
read -p "Y/[N]: " reply
reply=${reply:-N}
En gros, si la variable (reply) existe, elle est renvoyée, mais si elle est vide, elle renvoie le paramètre suivant ("N").