Bash : des choses que je ne savais pas...
On en découvre tous les jours sur Bash, surtout si on l'a appris en fonction de ses besoins et pas globalement.
Ainsi, on va rediriger la sortie d'un find vers une boucle while et utiliser des pseudos-classes :
#!/bin/bash
# This bash script will locate and replace spaces in the filenames
DIR="."
# Controlling a loop with bash read command by redirecting STDOUT as a STDIN to while loop
# find will not truncate filenames containing spaces
find $DIR -type f | while read file; do
# using POSIX class [:space:] to find space in the filename
if [[ "$file" = *[[:space:]]* ]]; then
# substitute space with "_" character and consequently rename the file
mv "$file" `echo $file | tr ' ' '_'`
fi;
doneLe mot-clé select existe en Bash :
select word in "linux" "bash" "scripting" "tutorial" do echo "The word you have selected is: $word" break # Break, otherwise endless loop done
Les expensions ANSI-C :
# as a example we have used \n as a new line, \x40 is hex value for @ # and \56 is octal value for . echo $'web: www.linuxconfig.org\nemail: web\x40linuxconfig\56org'
Les redirections...
X>&Y : redirige le flux de X vers le flux Y X> : redirige le flux X (par défaut stdout ou 1) vers un fichier On peut combiner les redirections précédentes, par exemple : > file 2>&1 Les deux indicateurs de redirections sont équivalents : >& et &>, tous les deux redirigent stdout et stderr vers un fichier < : remplace stdin avec le contenu d'un fichier <X : remplace le flux X avec le contenu d'un fichier Si on utilise ces opérations de redirections avec la commande "exec" on exécute la redirection pour toute la durée du processus courant ou jusqu'à une modification de cette redirection et plus seulement dans le contexte d'une commande donnée. Donner des exemples. # Link filedescriptor 10 with stdin # stdin replaced with a file Exemple : exec 10<&0; exec < Fichier Son opposé (pour restaurer) : exec 0<&10 10<&- On va utiliser 'exec < Fichier' pour pouvoir, par exemple, faire un 'while read Line' et énumérer toutes les lignes du fichier Fichier. Question : est-ce que 'cat Fichier | command' est équivalent à 'command < Fichier' ?
Les expressions et leurs calculs
let Var=Expression : permet le calcul de Expression et le placement de son résultat dans Var
On peut "expandre" (calculer le résultat d'une expression) avec $((Expression)) ou $[ Expression ]
On peut écrire Base#Valeur pour déclarer la base dans laquelle s'exprime la valeur
