Language shell
Variables | |||
---|---|---|---|
variable | affectation | referencement | affichage |
ma_var | ma_var="helloworld" | $ma_var | echo $ma_var |
Les caractères | |||
---|---|---|---|
? | un caractère quelqu'onque | ||
[ ] | enssemble | ||
* | n'importe lequel | ||
\ | le caractère qui le suit ne seras pas substitué | ||
[a-c] | de a à c | ||
ls a*c | tout fichier qui se commence par a et se fini par c | ||
> | redirige le flux de sortie vers un fichier | ||
>> | redirige le flux de sortie vers un fichier et le met à la fin | ||
2> | redirige le flux d'erreur vers un fichier | ||
2>&1 | redirige le flux de sortie et d'erreur dans le même flux | ||
< | envoie le contenu d'un fichier à une commande | ||
<< | passe la console en mode saisie au clavier, ligne par ligne. Toutes ces lignes seront envoyées à la commande lorsque le mot-clé de fin aura été écrit. |
écriture de lecture | |||
---|---|---|---|
'[expression]' | Les simples quotes délimitent une chaîne de caractères. Même si cette chaîne contient des commandes ou des variables shell, celles-ci ne seront pas interprétées. Par exemple : | $ variable="secret" $ echo 'Mon mot de passe est $variable.' Mon mot de passe est $variable. |
|
"[expression] " | Les doubles quotes délimitent une chaîne de caractères, mais les noms de variable sont interprétés par le shell. Par exemple : | $ variable="secret" $ echo "Mon mot de passe est $variable." Mon mot de passe est secret. |
|
` [expression] ` | Bash considère que les Back-quotes (ouvre un nouveau shell et considère le résultat comme une commande) délimitent une commande à exécuter. Les noms de variable et les commandes sont donc interprétés. Par exemple : | $ echo `variable="connu"; echo "Mon mot de passe est $variable."` Mon mot de passe est connu. |
|
(()) | similaire à la commande let, la construction ((...)) permet une évaluation arithmétique permet aussi la manipulation de variables à la manière du C dans Bash, par exemple (( var++ )). |
(( t = a<45?7:11 )) # opérateur à trois opérandes, style C. "echo "If a < 45, then t = 7, else t = 11. echo "t = $t" |
Les commandes de base | |||||
---|---|---|---|---|---|
commande | structure | options | explication | plus | |
ls | -a -l | ignore si le fichier est caché liste sur une ligne | lister les entrée d'un dossier | ||
cd | pas d'option | changer de dossier | par défault se place dans le home ~ | ||
mkdir | -p | force la création de l'arborescence | création de branche intermédiaire si nécessaire | ||
rmdir | -r -f | mode récursif forçage | supprime un dossier | ||
touch | création de fichier | ||||
touch -m -t 0001010000 fichier.txt | Modifiez les dates d'accès et de modification du fichier au 1er Janvier 2000 à 0h00 | ||||
ln [nom du fichier] [nom du nouveau fichier] | -s | crée un lien symbolique | |||
commande approfondies | chmod | [OPTION]... MODE[,MODE]... FILE... | [-R] [ugoa] [+-=] [rwx... ...st ...ugo] file | récursivité user, group, other or all ajout retrait ou positionnement read write, execute set-uid, set-gid or sticky recopie les droits user, group, all file | droit symboliques | cp | [OPTION]... [-T] SOURCE DEST | -i -d -p -r | invite avant écraser preserve le liens ne suit pas le liens symbolique jusqu'a la source récursivement | couper | mv | [OPTION]... [-T] SOURCE DEST | -u | déplace uniquement si la source est plus récente | déplacer | rm | [OPTION]... [FILE]... -r -f | recursive forçage | supression | cat | [OPTION]... [FILE]... | -n | numérote les lignes | afficher le contenue d'un fichier sur la sortie standart | diff | [OPTION]... [FILE]... | beaucoup | compare le contenue de deux fichiers lignes par lignes | ligne par lignes | more | [OPTION]... [FILE]... | affiche page à page | less | [option] [fichier] | parcourt interactif | df | [OPTION]... [FILE]... | -h | human readable | afficher les éléments sur la nature | du | [OPTION]... [FILE]... | -h -s | human readable ne pas inclure les sous dossier | taille disque d'une entrée logique | basename | OPTION... CHEMIN/NAME... | reference [suffixe] | nettoyage des branches du sgf pour récupérer le nom du fichier | dirname | OPTION... CHEMIN/NAME.. | reference [suffixe] | nettoyage de la branche pour récupérer le chemin de fichier | date | [OPTION]... [+FORMAT] | date +%Y-%m-%d | donne la date | echo | [SHORT-OPTION]... [STRING]... | envoie sur la sortie standard le flux d'entré | read | [arg1,arg2] | lecture de l'entrée standart et référencement par arguement | expr | [arg1,arg2] | evalue une expression arithmétique | seq | [OPTION]... LAST | génère des séquences | head | [OPTION]... [FILE]... | [n] | flux | renvoie n ligne depuis la tête | tail | [OPTION]... [FILE]... | [n] | flux | renvoie n ligne depuis la queue | wc | [OPTION]... [FILE]... | renvoie le nbr de ligne nbr caractère etc… | cut | [OPTION]... [FILE]... | [c/d] x-x cut -d; -f2 | coupe | tr | [OPTION]... SET1 [SET2] | transforme | tr o a bonjour = banjaur | sort | [OPTION]... [FILE]... | trie alpha numérique | uniq | [OPTION]... [INPUT [OUTPUT]] | nettoyage des données dupliquées consécutives | tee | [OPTION]... [FILE]... | -i | ignore l'interruption | idem à cat mais à plusieurs sortie | read | lecture d une ligne de l entree standart | find | find . | sed 's/[^/]*\//| /g;s/| *\([^| ]\)/+--- \1/' | crée une arborescence |
les "build in command" | let | commande | |||
expr | Opérateurs | Signification | |||
$nb1 + $nb2 | Addition | ||||
$nb1 - $nb2 | Soustraction | ||||
$nb1 \* $nb2 | Multiplication | ||||
$nb1 / $nb2 | Division | ||||
$nb1 % $nb2 | Modulo | ||||
Opérateurs de comparaison | |||||
$nb1 \> $nb2 | VRAI si $nb1 est strictement supérieur à $nb2 | ||||
$nb1 \>= $nb2 | VRAI si $nb1 est supérieur ou égal à $nb2 | ||||
$nb1 \< $nb2 | VRAI si $nb1 est strictement inférieur à $nb2 | ||||
$nb1 \<= $nb2 | VRAI si $nb1 est inférieur ou égal à $nb2 | ||||
$nb1 = $nb2 | VRAI si $nb1 est égal à $nb2 | ||||
$nb1 != $nb2 | VRAI si $nb1 est diférent de $nb2 | ||||
Opérateurs logiques | |||||
$chaine1 \& $chaine2 | VRAI si les 2 chaines sont vraies | ||||
$chaine1 \| $chaine2 | VRAI si l'une des 2 chaines est vraie | ||||
Opérateurs divers | |||||
-$nb1 | Opposé de $nb1 | ||||
\( expression \) | Regroupement | ||||
$chaine : expression_reguliere | Compare la chaine avec l'expression régulière | ||||
les commande de systeme | top | affiche l'etat des processus en cour dynamiquement | ps | -u -faux | affiche les processus de l'utilisateur tout les processus par enchainement | kill PID | tuer un processus par son numéro de processus | killall/pkill NomProcess | tuer un processus par son nom | strace -p PID | suivre les appel systeme d'un processus | bg | passe une commande en arrière plan | fg | passe une cmmande au premier plan |
commande réseau | ifconfig | ping | -c | dig | netstat | --inet -n -p -a | Affiche les connexions réseau, les tables de routage, les statistiques des inter‐ faces, les connexions masquées, les messages netlink, et les membres multicast. | telnet | route | lspci | nmtui | utilitaire de neetwork manager !!!!!!!!!!!!!!!!!!!!!!!!! | nmap -sL -sV 192.168.1.0/24 | scan reeau |
les expression régulières | grep | [OPTIONS] PATTERN [FILE...] | -E -v | Interprette les pattern comme une expression régulière inverse | recherche des pattern sur l'entrée standart | sed | [OPTION]... {script-only-if-no-other-script} [input-file]... | -n -i -s d | mode silencieux (n'affiche que les paterne demandé) applique directement les modification substitution supprimer | s/pattern/pattern/ =>(substitute) "/pattern/pattern/p" => (print) "/pattern/pattern/g" =>(générale) ne s'arrete pas à la première occurence | sed poussé | sed '/debut/,/fin/ s/.*//' test | Affichez le contenu d'un fichier en supprimant les lignes comprises entre les lignes contenant les chaînes 'debut' et 'fin |
---|
commandes et les expression régulières | |||
---|---|---|---|
Pattern d'expression | exemple | resultat | |
. | caractere quelqu onque | grep -E "^....$" monfichier.txt | afficher toutes les lignes comportant 4 caractere |
^ | debut de ligne | grep "^c" monfichier.txt | affiche toutes les lignes commençant par le caractère "c" |
$ | fin de ligne | grep "e$" nouveau1 | affiche toutes les lignes se terminant par le caractère "e" |
. | caractere | grep "^c.*!" monfichier | afficher toutes les lignes commençant par c et ayant un nbr de caractère après lesquels on à le "!" |
* | replicateur (Ofois ou nfois) | sed "s/(.*)/bonjour/" monfichier sed "s/^e.*,/bonjour/" monfichier | cat | remplace les (nnnnnn) par bonjour remplace "en raisonner, n'ayant pas un sol, j'écris sur la valeur de l'argent" par "bonjour j'écris sur la valeur de l'argent" |
+ | replicateur non null au moins 1 fois | "^e[a-z ?'-]+\." monfichiertexte | patterne commençant par e, suivi de caractère [a-z] d'espace de point d'interrogation d'apostrophe de - et d'un point |
? | replicateur d option au plus 1 fois | "^et .?.?" | et ri | et me | et pa |
\{n\} {n} exactement n fois {n,m} entre n et m fois {n,} au minimum n fois |
replicateur n fois | -E "a{2,3}" "a\{2,3\}" | reconnaît aa ou aaa. |
[] | enssemble de caractère | "^[A-Z].*\." monfichier | tout ce qui commençant par une majuscule jusqu'au point |
[^xyz] | en debut d enssemble tout sauf | sed "s/^[^0-9]/Majusculeeletenculent/" monfichier | remplace toutes les lettre qui ne sont pas des numéro par Majuscu[...]t |
script-shell les conditions | ||
---|---|---|
commande | explications | exemples |
-z | vérifie si la chaine est vide | -z $chaine1 |
-n | vérifie si la chaine est non vide | -n $chaine1 |
!= | vérifie si deux chaines sont différentes | $chaine1 != $chaine2 |
= == | vérifie si les chaines sont identiques | $chaine1 = $chaine2 $chaine1 == $chaine2 |
-eq | Vérifie si les nombres sont égaux (equal). À ne pas confondre avec le « = » qui, lui, compare deux chaînes de caractères. | $num1 -eq $num2 |
-ne | Vérifie si les nombres sont différents (nonequal). Encore une fois, ne confondez pas avec « != » qui est censé être utilisé sur des chaînes de caractères. | $num1 -ne $num2 |
-lt | Vérifie sinum1est inférieur ( < ) ànum2(lowerthan). | $num1 -lt $num2 |
-le | Vérifie sinum1est inférieur ou égal ( < = ) ànum2(lowerorequal). | $num1 -le $num2 |
-gt | Vérifie sinum1est supérieur ( > ) ànum2(greaterthan). | $num1 -gt $num2 |
-ge | Vérifie sinum1est supérieur ou égal ( >= ) ànum2(greaterorequal). | $num1 -ge $num2 |
condition de fichier | ||
---|---|---|
-e | Vérifie si le fichier existe. | -e $nomfichier |
-d | Vérifie si le fichier est un répertoire. N'oubliez pas que sous Linux, tout est considéré comme un fichier, même un répertoire ! | -d $nomfichier |
-f | Vérifie si le fichier est un… fichier. Un vrai fichier cette fois, pas un dossier. | -f $nomfichier |
-L | Vérifie si le fichier est un lien symbolique (raccourci). | -L $nomfichier |
-r | Vérifie si le fichier est lisible (r). | -r $nomfichier |
-w | Vérifie si le fichier est modifiable (w). | -w $nomfichier |
-x | Vérifie si le fichier est exécutable (x). | -x $nomfichier |
-nt | Vérifie sifichier1est plus récent quefichier2(newerthan). | $fichier1 -nt $fichier2 |
-ot | Vérifie sifichier1est plus vieux quefichier2(olderthan). | $fichier1 -ot $fichier2 |
script-shell les arguements $ | |
---|---|
$0 | nom du script. Plus précisément, il s agit du paramètre 0 de la ligne de commande, équivalent de argv[0] |
$0, $1 ... $9... ${10}, ${11} | espectivement premier, deuxième, ..., neuvième paramètre de la ligne de commande |
$* | tous les paramètres vus comme un seul mot |
$@ | tous les paramètres vus comme des mots séparés : "$@" équivaut à "$1" "$2" ... |
$# | nombre de paramètres sur la ligne de commande |
$- | options du shell |
$? | code de retour de la dernière commande exit $1; fixe le $? à 1 convention : $?=0 succès, $?!=O code d'erreur |
$$ | PID du shell echo $$ affiche le nbr de processus en cours |
$! | PID du dernier processus lancé en arrière plan |
$_ | dernier arguement de la commande précédente |
$IFS | contient la liste de tout les séparateur par défault : IFS=$' \t\n' |
${arr[*]} | tout les items du tableau |
${!arr[*]} | tout les indexes du tableau |
${#arr[*]} | nombres d'items dans la case du tableau |
${#arr[0]} | nombres d'items dans la case du tableau 0 |
les boucles | |
---|---|
si | if [ test ] then commandes else commandes fi |
si | if [ test ] then commandes elif commande else commandes fi |
tanque | while [ expr] do commandes done |
tanque | until[ expr ] do commandes done |
pour | for ID in list do commandes done |
pour | for ID do commandes done |
shift | décalle les paramètre d'un vers la gauche (un parametre disparait) |
rupture de flow | |
break [n] | n : permet de préciser le niveau de rupture (sortir d'une 2, ou trois boucle etc... |
continue [n] | n : permet de préciser le niveau de rupture (sortir d'une 2, ou trois boucle etc... |
les séquences conditionelles | |
---|---|
; | evalue de gauche à droite |
| | permet de rediriger le flux de sortie |
() | concatène le flux de sortie concatene une commande vers un flux |
&& (sequence si vrai) | evalue la commande de droite si retour de gauche faux arrete la sequence si echec de la commande de gauche |
|| (sequence si faux) | evalue la commande de droite si retour de gauche faux arrete la sequence des qu une commande se deroule avec succes |
#!/bin/sh [options] | le shebang |
[$# lt 1]&& exit 1 | vérifie si un des deux parametre est vrai |
[$# -ne 0]|| exit 1 | vérifie si un des deux parametre est vrai |
Variables d'environnement | |||
---|---|---|---|
$ | user | shell | ppid les ((valeur du processur qui à crée e processus courant) le père du bash) | pwd | random (génere des variables aléaoire ) | hostname | ifs | PATH (enssemble des chemin des bianires du bash | home | ps1 |
Signaux | |||
---|---|---|---|
Numéro (dépend de l'implémentation ou du processeur) | Nom | Signification | |
1 | SIGHUP | Déconnexion du terminal ou mort du processus de contrôle | |
2 | SIGINT | Interruption depuis le clavier | |
3 | SIGQUIT | Quitter (depuis le clavier) | |
4 | SIGILL | Instruction illégale | |
5 | SIGTRAP | Un point d'arrêt a été trouvé | |
6 | SIGABRT | Signal d'arrêt depuis la fonction abort() du langage C | |
6 | SIGIOT | Synonyme de SIGABRT | |
7 | SIGEMT | Terminaison | |
8 | SIGFPE | Erreur mathématique en virgule flottante | |
9 | SIGKILL | Signal KILL. Permet de terminer un processus en urgence | |
10 | SIGBUS | Erreur de bus | |
11 | SIGSEGV | Référence mémoire invalide | |
11 | SIGSEGV | Référence mémoire invalide | |
12 | SIGSYS | Mauvais argument de routine | |
13 | SIGPIPE | Tentative d'écriture dans un tube sans lecteur à l'autre bout | |
14 | SIGALARM | Envoyé quand un timer atteint la durée décomptée | |
15 | SIGTERM | Terminaison normale de processus | |
16, 10, 30 | SIGUSR1 | Au choix de l'utilisateur | |
16 | SIGSTKFLT | Erreur de pile sur coprocesseur | |
16, 23, 21 | SIGURG | Un socket a le flag "urgent d'activé | |
17, 12, 31 | SIGUSR2 | Au choix de l'utilisateur | |
17, 20, 18 | SIGCHLD | Processus fils arrêté ou terminé | |
17, 19, 23 | SIGSTOP | Arrêt du processus | |
18, 20, 24 | SIGTSTP | Stop déclenché depuis un terminal | |
18 | SIGTSTP | Idem SIGCHLD | |
19, 18, 25 | SIGCONT | Continuer si le processus est arrêté | |
20, 21, 26 | SIGTTIN | Lecture depuis un terminal (en arrière-plan) | |
20, 21, 26 | SIGTTOU | Écriture depuis un terminal (en arrière-plan) | |
23, 29, 22 | SIGIO | Entrées-sorties à nouveau possibles | |
- | SIGPOLL | Idem SIGIO | |
24, 24, 30 | SIGXCPU | Limite de temps CPU dépassée | |
25, 31 | SIGFSZ | Taille de fichier excessive | |
26, 28 | SIGVTALRM | Alarme virtuelle | |
27, 29 | SIGPROP | Profile Alarm Clock | |
28, 20 | SIGWINCH | Fenêtre redimensionnée | |
29, 30, 19 | SIGPWR | Chute d'alimentation | |
29 | SIGINFO | Idem SIGPWR | |
- | SIGLOST | Perte de verrou de fichier | |
31 | SIGUNUSED | Signal inutilisé |
les couleurs | |||
---|---|---|---|
les couleurs | \033[A;B;Cm avec A=effet, B=texte, C=fond |
printf '\033[A;B;Cm' | |
annuler | \033[0m | printf '\033[0m' | |
couleur | texte | fond | |
noir | 30 | 40 | |
rouge | 31 | 41 | |
vert | 32 | 42 | |
jaune | 33 | 43 | |
bleue | 34 | 44 | |
Magenta | 35 | 45 | |
Cyan | 36 | 46 | |
Blanc | 37 | 47 | |
effet | code | ||
normal | 0 | ||
gras | 1 | ||
non gras | 21 | ||
souligné | 4 | ||
non souligné | 24 | ||
clignotant | 5 | ||
non clignotant | 25 | ||
inversé | 7 | ||
non inversé | 27 |
commande avancées | |||
---|---|---|---|
La commande cat | |||
Affichez le contenu d'un fichier texte grâce à la commande cat | cat fichier.txt | ||
Affichez le contenu de 3 fichiers textes 'fichier_1.txt', 'fichier_2.txt' et 'fichier_3.txt' dans l'ordre fichier_2.txt, fichier_1.txt puis fichier_3.txt avec une seule commande cat. | cat fichier2.txt fichier1.txt fichier3.txt | ||
La commande more/less | |||
Affichez le contenu d'un fichier texte de grande taille page par page grace à la commande more (ou less) page par page | more/less fichier.txt | ||
Affichez le contenu d'un fichier texte de grande taille page par page en commençant à la ligne 100 | more/less +100 fichier.txt | ||
Cherchez une chaîne de caractères dans un fichier de grande taille en utilisant les fonctionnalités de la commande 'more' (ou less) | more/less +/string fichier.txt | ||
La commande head | |||
Affichez les 50 premières lignes d'un fichier texte | head -n 10 fichier.txt | ||
Affichez les 5 premières lignes de 5 fichiers texte à l'aide d'une seule commande head | head -n 10 fichier.txt fichier1.txt … | ||
Affichez les 200 premiers caractères d'un fichier texte | head -c200 fichier.txt | ||
La commande tail | |||
Affichez les 10 dernières lignes d'un fichier texte | same que head | ||
Affichez les 5 dernières lignes de 5 fichiers texte | same que head | ||
Affichez les dernières lignes d'un fichier texte au fur et à mesure de leur ajout | tail fichier.txt -f | ||
La commande cut | |||
Affichez la 3ième colonne d'un fichier dont les colonnes sont séparées par une tabulation | cut -d';' -f2 | ||
Affichez la 1ère colonne et les colonnes 5 à 8 d'un fichier dont les colonnes sont séparées par une virgule | cat fichier1.txt |cut -d',' -f1,5-8 | ||
Affichez les 10 premiers caractères de toutes les lignes d'un fichier texte | cat fichier1.txt |cut -c 1-200 | ||
La commande sort | |||
Triez les lignes d'un fichier suivant l'ordre alphanumérique | sort fichier | ||
Triez les lignes d'un fichier suivant l'ordre alphanumérique de la 3ième colonne (séparées par une tabulation) | sort -t',' -k2 fichier1.txt | ||
Triez les lignes d'un fichier suivant l'ordre numérique de la 2ième colonne (séparées par un caractère ':') | |||
Triez les lignes d'un fichier suivant l'ordre numérique inversé de la 2ème colonne (séparées par un caractère ':') | sort -t',' -k2 -r fichier1.txt | ||
Triez les lignes d'un fichier suivant l'ordre alphanumérique en n'affichant qu'une seule fois les lignes identiques | sort -t',' -k2 -r -u fichier1.txt | ||
La commande paste | |||
Affichez le contenu de 2 fichiers "collés" ligne par ligne | paste fichier1 fichier2 | ||
Affichez le contenu de 3 fichiers "collés" ligne parligne en utilisant le caractères '+' aux "jonctions" des fichiers | paste -d + fichier1 fichier2 fichier3 | ||
La commande uniq | |||
Affichez le contenu d'un fichier en n'affichant qu'une seule fois les lignes identiques qui se suivent | uniq file.txt | ||
Affichez le contenu d'un fichier en n'affichant qu'une seule fois les lignes identiques qui se suivent sans tenir compte de la casse pour la comparaison | uniq - fichier.txt | ||
Affichez le contenu d'un fichier en n'affichant qu'une seule fois les lignes identiques sans tenir compte des 5 premiers caractères | uniq -s 5 fichier1.txt -d | ||
Affichez le contenu d'un fichier en n'affichant qu'une seule fois les lignes identiques qui se suivent, chaque ligne étant précédée par le nombre de fois qu'elle est répétée consécutivement | uniq -f 1 fichier1.txt | ||
La commande wc | |||
Affichez le nombre de lignes, de mots et de caractères d'un fichier | wc fihier.txt | ||
Affichez le nombre de caractères d'un fichier | wc -m fihier.txt | ||
Affichez le nombre de lignes d'un fichier | wc -l fihier.txt | ||
Affichez le nombre de mots d'un fichier | wc -w fihier.txt | ||
La commande tr | |||
Affichez les caractères de l'entrée standard sans le caractère 'a' | tr -d 'a' < fichier1.txt | ||
Affichez les caractères de l'entrée standard en remplaçant le caractère 'a' par 'A' | tr a A < fichier1.txt | ||
Affichez les caractères de l'entrée standard sans les caractère 'a', 'b' et 'c' en une seule commande tr | tr -d 'a,b,c' < fichier1.txt | ||
Affichez les caractères de l'entrée standard en ne conservant qu'une seule occurence des caractères 's' ou 't' qui se suivent immédiatement | tr [:lower:] [:upper:] < fichier1.txt | ||
La commande diff | |||
Affichez les différences entre deux fichiers texte | diff fichier1 fichier2 | ||
Affichez les différences entre deux fichiers texte en ne prenant pas en compte la casse | diff -i fichier1 fichier2 | ||
Affichez les différences entre les fichiers de deux répertoires (et récursivement de leurs sous-répertoires) | diff -r fichier1 fichier2 |