Bash
Chaîne de commandes et d'opérations
Recherche…
Introduction
Il existe des moyens de chaîner les commandes ensemble. Des simples comme juste un; ou plus complexes comme les chaînes logiques qui fonctionnent selon certaines conditions. Le troisième est les commandes de canalisation, qui transfèrent efficacement les données de sortie à la commande suivante de la chaîne.
Compter une occurrence de modèle de texte
L'utilisation d'un tube fait que la sortie d'une commande est l'entrée du prochain.
ls -1 | grep -c ".conf"
Dans ce cas, la sortie de la commande ls est utilisée comme entrée de la commande grep. Le résultat sera le nombre de fichiers qui incluent ".conf" dans leur nom.
Cela peut être utilisé pour construire des chaînes de commandes ultérieures aussi longtemps que nécessaire:
ls -1 | grep ".conf" | grep -c .
transférer la sortie racine cmd au fichier utilisateur
Souvent, on veut montrer le résultat d'une commande exécutée par root à d'autres utilisateurs. La commande tee permet d’écrire facilement un fichier avec les perms utilisateurs d’une commande exécutée en tant que root:
su -c ifconfig | tee ~/results-of-ifconfig.txt
Seul ifconfig s'exécute en tant que root.
chaînage logique des commandes avec && et ||
&& enchaîne deux commandes. Le second ne fonctionne que si le premier sort avec succès. || enchaîne deux commandes. Mais le second ne fonctionne que si le premier sort avec échec.
[ a = b ] && echo "yes" || echo "no"
# if you want to run more commands within a logical chain, use curly braces
# which designate a block of commands
# They do need a ; before closing bracket so bash can diffentiate from other uses
# of curly braces
[ a = b ] && { echo "let me see."
echo "hmmm, yes, i think it is true" ; } \
|| { echo "as i am in the negation i think "
echo "this is false. a is a not b." ; }
# mind the use of line continuation sign \
# only needed to chain yes block with || ....
chaînage en série des commandes avec un point-virgule
Un point-virgule ne sépare que deux commandes.
echo "i am first" ; echo "i am second" ; echo " i am third"
chaîner des commandes avec |
Le | prend la sortie de la commande de gauche et la canalise en entrée de la bonne commande. Attention, cela se fait dans un sous-shell. Par conséquent, vous ne pouvez pas définir les valeurs des vars du processus appelant dans un canal.
find . -type f -a -iname '*.mp3' | \
while read filename; do
mute --noise "$filename"
done