Guillaume Chanel
Remerciements à Jean-Luc Falcone
Cours système d'exploitation by Guillaume Chanel, Jean-Luc Falcone and University of Geneva is licensed under CC BY-NC-SA 4.0
| cat | concatène plusieurs fichiers |
|---|---|
| tr | transforme les caractères |
| sort | trie les lignes |
| uniq | rend unique les lignes répétées |
$ cat mail1.txt mail2.txt | tr '[A-Z]' '[a-z]' | sort | uniq > result.txt
source)La commande source permet d'éxécuter un script dans le shell actuel
$ source backup.sh
#!)On peut préciser l'interpréteur par défaut du script avec les caractères #! au début du script (prononcer hash-bang, she-bang ou sha-bang):
Exécuter backup1.sh dans un nouveau processus:
$ chmod u+x backup1.sh
$ ./backup1.sh
On assigne des variables avec le symbole =.
On accède à la valeur de la variable avec le symbole $:
$ message="Je suis ... "
$ echo message
$ echo $message
$ echo ${message}
$ echo "${message}Guillaume"
Les variables ne sont pas typées.
if then)Il existe des structures de contrôle if comme dans la plupart des languages:
if [ EXPRESSION ]; then
cmd1
cmd2
...
fi
if then else)if [ EXPRESSION ]; then
cmd1
cmd2
...
else
cmd10
cmd11
...
fi
On peut tester une expression avec la commande test généralement utilisée avec des crochets:
test EXPRESSION
[ EXPRESSION ]
| -e FILE | Le fichier FILE existe | |
|---|---|---|
| -f FILE | Le fichier FILE existe et est un "vrai" fichier | |
| -d FILE | Le fichier FILE existe et est un répertoire | |
| -x FILE | Le fichier FILE existe et est éxécutable | |
| -w FILE | Le fichier FILE existe et on peut écrire | |
| FILE1 -nt FILE2 | Le fichier FILE1 est plus récent que le fichier FILE2 | |
| FILE1 -ot FILE2 | Le fichier FILE1 est plus ancien que le fichier FILE2 |
| ! EXPRESSION | Retourne vrai si EXPRESSION est fausse |
|---|---|
| EXPR1 -a EXPR2 | Retourne vrai si EXPR1 et EXPR2 sont vraies |
| EXPR1 -o EXPR2 | Retourne vrai si EXPR1 ou EXPR2 sont vraies |
| STRING1 = STRING2 | Retourne vrai si STRING1 égale à STRING2 |
| STRING1 != STRING2 | Retourne vrai si STRING1 n'est pas égale à STRING2 |
for)for VAR in LIST; do
CMD1 $VAR
CMD2 $VAR
...
done
Une liste peut être:
for ANIMAL in chat chien oiseaufor I in {1..9}for FILE in *.txtIl est souvent intéressant de capturer le résultat d'une commande.
Il existe deux formes de syntaxes:
`CMD OPTIONS ARGUMENTS`$( CMD OPTIONS ARGUMENTS )$ echo "Mon nom d'utilisateur est: `whoami`"
$ echo "Mon nom d'utilisateur est: $(whoami)"
$ a=`ls *.sh`
$ a=$(ls *.sh)
Il est possible de récupérer les arguments passés à un script en utilisant, les variables $1, $2, $3, etc.
Usage:
$ ./backup5.sh ~/data ~/data/backup
Les fonctions se définissent de la manière suivante:
function show {
echo "$1 ------ $2" # $1 et $2 sont les 1er et 2ème paramètres passés à la fonction
}
show foo bar # appel à la fonction
casefunction extract() {
if [ -f $1 ] ; then
case $1 in
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*) echo "'$1' cannot be extracted" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
Bash utilise plusieurs fichiers cachés à la racine du home pour obtenir une configuration:
.bashrc | exécuté à chaque nouveau shell (non-login) | .bash_profile | shell de login uniquement. | .bash_logout | exécuté lorsqu'on quitte un shell de login |
|---|
.bash_profile)tty).bashrc depuis .bash_profile (automatique sous Mac)..bashrc)Habituellement, on utilise .bashrc pour définir les éléments suivants:
export)$ (comme une variable normale).export:$ export VAR1="hello world"
$ echo $VAR1
| $PATH | chemin d'accès | $HOME | répertoire Home | $LANG | Language par défaut | $DISPLAY | Serveur graphique | $PS1 | Prompt | $HOSTNAME | Nom de la machine |
|---|
$PATH définit le chemin par défaut.alias seule permet d'afficher tous les alias.umask)umask.umask [permissions]
umask donne sa valeur actuelle.| awk '{print $n}' | selectioner la n ème colonne. |
|---|---|
| basename <FILE> | récupère le nom du fichier (sans le chemin) |
| dirname <FILE> | récupère le chemin d'un fichier |
| sed s/JPEG/jpg/ | remplace 'JPEG' par 'jpeg' |
| uname -n | retourne le nom de la machine |
| cut -c m-n | extrait les caractères de m à n de chaque ligne |
| sed '1d' | ommet la première ligne |
Livres
Liens