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 oiseau
for I in {1..9}
for FILE in *.txt
Il 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
case
function 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