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 
commandestructure 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 -udéplace uniquement si la source est plus récente déplacer
rm [OPTION]... [FILE]...
-r
-f
recursive
forçage
supression
cat [OPTION]... [FILE]... -nnumé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]... -hhuman 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]...-iignore l'interruption idem à cat mais à plusieurs sortie
read lecture d une ligne de l entree standart
findfind . | 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
topaffiche l'etat des processus en cour dynamiquement
ps-u
-faux
affiche les processus de l'utilisateur
tout les processus par enchainement
kill PIDtuer un processus par son numéro de processus
killall/pkill NomProcesstuer un processus par son nom
strace -p PIDsuivre les appel systeme d'un processus
bgpasse une commande en arrière plan
fgpasse une cmmande au premier plan
commande réseau
ifconfig
ping-c
dig
netstat--inet -n -p -aAffiche 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
nmtuiutilitaire de neetwork manager !!!!!!!!!!!!!!!!!!!!!!!!!
nmap -sL -sV 192.168.1.0/24scan 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 catcat 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 textehead -n 10 fichier.txt
Affichez les 5 premières lignes de 5 fichiers texte à l'aide d'une seule commande headhead -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 textesame que head
Affichez les 5 dernières lignes de 5 fichiers textesame que head
Affichez les dernières lignes d'un fichier texte au fur et à mesure de leur ajouttail fichier.txt -f
La commande cut
Affichez la 3ième colonne d'un fichier dont les colonnes sont séparées par une tabulationcut -d';' -f2
Affichez la 1ère colonne et les colonnes 5 à 8 d'un fichier dont les colonnes sont séparées par une virgulecat fichier1.txt |cut -d',' -f1,5-8
Affichez les 10 premiers caractères de toutes les lignes d'un fichier textecat fichier1.txt |cut -c 1-200
La commande sort
Triez les lignes d'un fichier suivant l'ordre alphanumériquesort 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 identiquessort -t',' -k2 -r -u fichier1.txt
La commande paste
Affichez le contenu de 2 fichiers "collés" ligne par lignepaste 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 suiventuniq 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 comparaisonuniq - 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èresuniq -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écutivementuniq -f 1 fichier1.txt
La commande wc
Affichez le nombre de lignes, de mots et de caractères d'un fichierwc fihier.txt
Affichez le nombre de caractères d'un fichierwc -m fihier.txt
Affichez le nombre de lignes d'un fichierwc -l fihier.txt
Affichez le nombre de mots d'un fichierwc -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 trtr -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édiatementtr [: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