Ce ticket est un aide-mémoire non exhaustif sur les principales commandes bash sous Unix. Nous vous conseillons d'utiliser la commande man <commande> ou <commande> --help pour avoir plus d'informations sur celle-ci (documentation).
Remarque : Cet article contient des commandes pouvant entraîner des pertes de données, etc. Ce ticket peut égalment contenir des erreurs. Il est par conséquent important de se renseigner via la documentation avant de les utiliser.
cd /home/
cd "/home/mon utilisateur/"
cd /home/mon\ utilisateur/ # Échappement de l'espace
cd $MON_REPERTOIRE # Avec une variable
cd - # Positionne au répertoire précédent
cd # Positionne au répertoire d'accueil de l'utilisateur, identique à cd ~/
Remarque :
ls # Affiche les fichiers/dossiers du répertoire courant
ls /home # Affiche les fichiers/dossiers du répertoire /home
# L'option "-l" affiche en format long : droits d'accès propriétaires, groupes, taille répertoire/fichier... L'option "-a" affiche les fichiers commençants par "."
ls /home -la
ls /var/log/*log # Affiche tous les fichiers se terminant par "log"
ls -F # Fait suivre le nom des répertoires avec un slash
ls -lr # liste les fichiers en inversant l'ordre
Remarque :
mv ficA.txt ficb.txt # Renommage
mv ../monFichier.txt ./ # Déplacer le fichier "monFchier.txt" vers le répertoire courant
mv ../monFichier.txt monDossier/ # Déplacer le fichier "monFchier.txt" vers le dossier monDossier
mv monDossier monDossier2 # Renomme monDossier en monDossier2
mv monDossier2/* ../ # Déplace tout le contenu (*) du dossier monDossier2 dans le dossier parent (../)
cp monFichier monDossier/ # Copie simple d'un fichier
cp monDossier/* monDossier2/ # Copie du contenu du dossier dans un autre
cp -r monDossier/ monDossier3/ # Copie de monDossier en monDossier3 via l'option -r (récursive)
Commande touch, met à jour la date et l'heure d'accès pour la dernière modification d'un ou plusieurs fichiers avec la date actuelle. Si le fichier n'existe pas, il le crée à vide.
touch monFichier.txt
Également avec le système de redirection de flux :
> monFixhier.txt # Crée le fichier s'il n'existe pas. Attention, le vide s'il existe !
true > monFixhier.txt # pareil que précédemment
>> monFixhier.txt # Crée le fichier s'il n'existe pas, ne modifie ni son contenu ni sa date s'il existe.
echo "AAA" > monFixhier.txt # Crée le fichier s'il n'existe pas. Met "AAA" dedans.
rm monFichier.txt # Suppression d'un fichier du répertoire courant
rm *.log # Suppression de tous les fichiers se terminant par .log du répertoire courant
rm -r monDossier/ # Supprime un dossier (récursive)
rm -rf monDossier/ # Supprime un dossier avec l'option "force". Donc, aucune demande de confirmation sur certains dossiers ne sera pas demandée (attention à son utilisation)
cat monFichier.txt # Affiche le contenu du fichier
cat -n monFichier.txt # Affiche le contenu du fichier avec les lignes numérotées
cat *.log # Affiche tout le contenu des fichiers se terminant par log
Affiche les 10 premières lignes du fichier
head monFichier.txt # Affiche les 10 premières lignes
head -n 5 monFichier.txt # Affiche les 5 premières lignes
head -n -5 monFichier.txt # Afficher tout sauf les 5 dernières lignes
head -n -5 monFichier1.txt monFichier2.txt # Afficher tout sauf les 5 dernières lignes des fichiers monFichier1.txt, puis monFichier2.txt
tail monFichier.txt # Affiche les 10 dernières lignes
tail -n 5 monFichier.txt # Affiche les 5 dernières lignes
tail -n +5 monFichier.txt # Afficher tout sauf les 5 premières lignes
tail -n +5 monFichier1.txt monFichier2.txt # Afficher tout sauf les 5 premières lignes des fichiers monFichier1.txt, puis monFichier2.txt
more monFichier.txt # Affichage page par page
less monFichier.txt # Pour les gros fichier
maCommande
maCommande & # Commande exécutée en arrière-plan
maCommande1; maCommande2; # Commandes exécutées séquentiellement
Les opérateurs logiques && (et) et || (ou) permettent de conditionner l'exécution des commandes
# maCommande1 && maCommande2;
# Exécution de maCommande1 puis de maCommande2 si maCommande1 sort en succès
mkdir monDossier && touch monDossier/monFichier.txt
# maCommande1 || maCommande2;
# Exécution de maCommande1 puis de maCommande2 si maCommande1 sort en erreur.
mkdir monDossier || echo "KO"
# maCommande1 && maCommande2 || maCommande3;
# Exécution de maCommande1 puis de maCommande2 si maCommande1 sort en succès.
# Si maCommande1 ou maCommande2 sont en erreur, alors exécution de maCommande3.
mkdir monDossier && echo "OK" || echo "KO"
Remarque : Pour savoir si une commande sort en erreur, on peut, après avoir exécuté la commande, afficher le contenu de la variable $?, qui renvoi 0 si la commande s'est bien exécuté, une autre valeur sinon.
mkdir monDossier
echo $? # Output : 0 => succès
mkdir monDossier # Output : mkdir: cannot create directory ‘monDossier ’: File exists
echo $? # Output : 1 => erreur car le dossier existe déjà
Chaque processus possède par défaut :
Appelé "pipe", le mode tube ("|") redirige la sortie d'une commande dans l'entrée d'une autre commande. Ici, de maCommande1 vers l'entrée de maCommande2 :
maCommande1 | maCommande2
Redirection dans un fichier :
# Ne redirige que la sortie standard (stdout 1) vers monFichier.txt
maCommande > monFichier.txt
# Lit le fichier monFchier et renvoie le contenu de la lecture initialement vers la sortie standard vers le fichier monFichier2.txt (crée ou vide le fichier monFichier2.txt si existant)
cat monFichier > monFichier2.txt
# Similaire à la commande précédence, mais ajoute à la suite du fichier (ne vide pas le fichier avant la lecture).
maCommande >> monFichier.txt
# Redirige les erreurs vers le fichier (crée ou vide le fichier fichierErreur.log si existant)
maCommande 2> fichierErreur.log
mkdir monDossier 2> fichierErreur.log
# Similaire à la commande précédence, mais ajoute à la suite du fichier (ne vide pas le fichier avant la lecture).
maCommande 2>> fichierErreur.log
Outils :
# Ne jamais utiliser la sortie d'erreur ni la voir, alors la rediriger vers dev/null
maCommande 2>/dev/null
# N'avoir aucune sortie
maCommande > /dev/null 2>&1
# Renvoyer la sortie d'erreur dans le même fichier que la sortie standard
maCommand > monFichier.log 2>&1
Redirection de l'entrée standard avec < ou <<. Le mot clé situé après "<<" doit apparaître sur une nouvelle ligne contenant uniquement ce mot clé pour signifier la fin de l'entrée standard pour la commande spécifiée.
maCommande << MOT_CLE TEXT
TEXT
MOT_CLE
echo << END "AAA"
END # Output: AAA
# Redirige l'entrée contenu dans monFichier.txt vers maCommande
maCommande < monFichier.txt
ps # Liste les processus utilisateurs
ps -A # Liste tous les processus
top # Liste tous les processus et leur charge, plus visuel que ps
htop # Comme top, mais plus lisible (paquet à installer)
kill PID # Arrêter un processus par son PID
kill -9 PID # envoie de l'évènement SIGKILL au processus (force l’arrêt du processus)
killall NOM # Arrêter un processus par son nom
Déclaration basique : NOM_VARIABLE="VALEUR" ou NOM_VARIABLE='VALEUR' :
age=30
firstName="Alex"
firstName='Alex'
Exemple d'utilisation :
echo "Je m'appelle $firstName, j'ai ${age} ans."
# Output : Je m'appelle Alex, j'ai 30 ans.
# Fonctionne également pour afficher seulement le contenu de la variable
echo $firstName
echo ${age}
Pour afficher une variable on peut utiliser la syntaxe $NOM_VARIABLE, ou ${NOM_VARIABLE} (best practices)
Remarque :
Autres formes de déclaration utiles :
# Lecture seule
readonly lastName="Brown" # ou declare -r
# Déclarer une variable comme étant un entier
declare -i age=30
Pour supprimer une variable, il est nécessaire d'utiliser la commande unset.
unset firstName;
echo "Je m'appelle $firstName, j'ai ${age} ans."
# Output : Je m'appelle , j'ai 30 ans.
Lors de sa déclaration, par défaut, une variable n'est visible que dans son environnement courant. Elle peut être également locale (portée dans une fonction) via le mot clé "local", ou avoir une visibilité plus globale (visible dans tout l'environnement) via le mot clé "export" :
firstName="Alex" # visible dans l'env. d'exec courant
local firstName; # Visible localement (fonction par exemple)
export firstName; # Visible globalement (dans tout l'environnement)
Exemple :
function test() {
local firstName;
firstName="Alex";
echo $firstName;
}
firstName="Claire";
echo $firstName; # Output: Claire
test; # Output: Alex
echo $firstName; # Output: Claire
De manière générale, vous noterez qu'il y a des espaces au début et à la fin des fermetures des opérations. Sans, vous aurez une erreur.
resultat=$(( (10 * 5) + 3 ))
resultat=$[ (10 * 5) + 3 ]
Voir aussi la fonction let.
Utiles dans les scripts :
Utiles à la sortie d'une exécution d'une commande/script :
Utiles en général :
Voir aussi la fonction env.
Comme vu précédemment, pour lister un fichier contenant un espace, nous devions mettre le caractère \ devant l'espace. Sans cela, nous aurions eu une erreur. Plusieurs caractères dit "spéciaux" ne sont pas interprétés de la même manière. L'espace aurait signifié qu'il y avait un second argument (cd /home/mon\ utilisateur/). De même, le *, qui signifie "tout" (cat *.log).
Exemples avec l'étoile :
echo Il a vu une * # Output : Il a vu une Monfichier.txt onfichierA.txt monfichierB.txt
Les caractères spéciaux qu'il faut protéger sont en générale les suivants : ", ', `, \, $, !, ?, ~, (), [], {}, @, *
Ils peuvent être protégés par un \, être entre ' ou " :
echo "Il a vu une *" # Output : Il a vu une *
echo 'Cela fonctionne !' # Output : Cela fonctionne !
echo "Cela fonctionne aussi !" # Output : Cela fonctionne aussi !
echo Cela\ fonctionne\ également\ \! # Output : Cela fonctionne également !
# Échapement également dans les " "
echo "Mon path est $PATH et mon shell est $SHELL" # Remplacera les variables $...
echo "Mon path est \$PATH et mon shell est \$SHELL" # Ne remplacera pas les variables $
echo 'Mon path est $PATH et mon shell est $SHELL' # Ne remplacera pas les variables $..., aura la même valeur que la commande précédente
maChaine="Alex" # la variable contient "Alex"
maChaine=$(ls /) # la variable contient le listing du dossier racine ( / )
maChaine=`ls /` # la variable contient le listing du dossier racine ( / ). Obsolète.
commandes / Paramètre |
variable set et non null | variable set et null | variable unset | |
Utilisation de valeurs par défaut |
${variable:-alternative} |
retourne variable | retourne variable | retourne alternative |
${variable-alternative} |
retourne variable | retourne null | retourne alternative | |
Assignation de valeurs par défaut |
${variable:=alternative} |
retourne variable | assignation, retourne alternative | assignation, retourne alternative |
${variable=alternative} |
retourne variable | retourne null | assignation, retourne alternative | |
Indication d'erreur |
${variable:?alternative} |
retourne variable | erreur, exit | erreur, exit |
${variable?alternative} |
retourne variable | retourne null | erreur, exit | |
Utilisation d'alternative |
${variable:+alternative} |
retourne alternative | retourne null | retourne null |
${variable+alternative} |
retourne alternative | retourne alternative | retourne null |
Exemples :
# Aide à la récupération de valeur par défaut si non définie => ":-"
echo ${VARIABLE1-$VARIABLE2} => si VARIABLE1 n est pas définie ou vide, $VARIABLE2 retournée
${VARIABLE1-'text'} => si VARIABLE1 n est pas définie ou vide, 'text' sera retourné
# Aide à la récupération de valeur par défaut si non définie et non vide => ":-"
echo ${VARIABLE1:-$VARIABLE2} => si VARIABLE1 n est pas définie et est non vide, $VARIABLE2 sera retournée
${VARIABLE1:-'text'} => si VARIABLE1 n est pas définie ou vide et est non vide, 'text' sera retourné
# Aide à l assignation d une variable si non définie et non vide => ":="
echo ${VARIABLE1=$VARIABLE2} => si VARIABLE1 n est pas définie, $VARIABLE2 sera retournée et VARIABLE1 aura la valeur de $VARIABLE2
${VARIABLE1='text'} => si VARIABLE1 n est pas définie ou vide, 'text' sera retourné et affecté à VARIABLE1
# Aide à l assignation d une variable si non définie et non vide => ":="
echo ${VARIABLE1:=$VARIABLE2} => si VARIABLE1 n est pas définie et est non vide, $VARIABLE2 sera retournée et VARIABLE1 aura la valeur de VARIABLE2
${VARIABLE1:='text'} => si VARIABLE1 n est pas définie ou vide et est non vide, 'text' sera utilisé
# Erreur si la variable n est pas définie => "?" et ":?"
VARIABLE1=""
${VARIABLE1?"Variable is not set"} # bash: VARIABLE1: Variable is not set
unset VARIABLE1
${VARIABLE1:?"Variable is not set or empty"} # bash: VARIABLE1: Variable is not set or empty
Commande | Résumé |
${#variable} | Renvoie la taille de la variable |
${variable:X} | Récupération d'une sous chaîne après le X ème caractère |
${variable:-X} | Récupération des X derniers caractères |
${variable:X:Y} | Récupération d'une sous chaîne après le X ème caractère pour une longueur de Y |
${variable::X} | Récupération des X premiers caractères |
${variable::-X} | Récupération de tous les caractères, sans les X derniers |
${variable#pattern} | Récupération de tous les caractères en supprimant depuis le début de la chaîne la portion correspondant au pattern |
${variable##pattern} | Récupération de tous les caractères en supprimant depuis le début de la chaîne la portion la plus longue correspondant au pattern |
${variable%pattern} | Récupération de tous les caractères en supprimant depuis la fin de la chaîne la portion correspondant au pattern |
${variable%%pattern} | Récupération de tous les caractères en supprimant depuis la fin de la chaînes la portion la plus longue correspondant au pattern |
${variable,,} | Renvoie la variable en minuscule |
${variable^^} | Renvoie la variable en majuscule |
Exemples :
firstName="Alexandre"
echo "Taille de la chaine ${#firstName}" # Output: Taille de la chaine 9
echo "Je coupe la chaine : ${firstName:4}" # Je coupe la chaine : andre
echo "${firstName: -3}" # dre
echo "Je coupe la chaine a une taille fixe : ${firstName:4:3}" # Je coupe la chaine a une taille fixe : and
echo "Je coupe la chaine a une taille fixe : ${firstName:4:30}" # Je coupe la chaine a une taille fixe : andre
echo "${firstName::3}" # Ale
echo "${firstName::-3}" # Alexan
myText="La mise en developpement a ete effectuee correctement ce matin. Cette mise en developpement a duree 30 minutes."
echo ${myText#La*a} # Output: ete effectuee correctement ce matin. Cette mise en developpement a duree 30 minutes.
echo ${myText##La*a} # Output: duree 30 minutes.
echo ${PWD%/*}
echo ${myText%% *} # Output: La
# Transformer en minuscule
echo ${myText,,}
# Transformer en majuscule
echo ${myText^^}
Commande | Résumé |
${variable/AA/BB} | Retourne la valeur de la variable avec le remplacement de la première occurence de AA par BB |
${variable//AA/BB} | Retourne la valeur de la variable avec le remplacement de toutes les occurences de AA par BB |
Exemples :
myText="La mise en developpement a ete effectuee correctement ce matin. Cette mise en developpement a duree 30 minutes."
# Remplacer developpement par integration (première occurence)
echo ${myText/developpement/integration}
# Output: La mise en integration a ete effectuee correctement ce matin. Cette mise en developpement a duree 30 minutes.
# Remplacer developpement par integration (toutes les occurences)
echo ${myText//developpement/integration}
# Output: La mise en integration a ete effectuee correctement ce matin. Cette mise en integration a duree 30 minutes.
Exemple concret :
file="/etc/log/log.txt"
fileName="log.txt"
# Extrait le chemin
echo ${file%/*} # /etc/log/
# Extrait le fichier
echo ${file##*/} # log.txt
# Extrait le fichier sans l'extension
echo ${fileName%.*} # log
# Extrait l'extention du fichier
echo ${fileName##*.} # txt
Les scripts bash ont comme extension de fichier .sh (bien que cela soit facultatif). Ces scripts ont comme première ligne #!/bin/bash (shebang), ce qui permet de définir avec quoi le script sera interprété (ici bash).
Liste variables d'arguments :
Afin d'ajouter des paramètres en mettant à jour automatiquement $1 etc, utiliser la commande set, exemple :
set alex 21
Variables standards utiles :
Un script bash a une valeur de sortie par défaut à 0, qui est par convention une sortie à succès. Il est possible de sortir en échec, via la commande exit. Le code de sortie peut aller de 0 à 255 inclus maximum.
exit 25;
La récupération de cette valeur est effectuée via la variable $?. Prenons pour exemple "monScript.sh qui fait un "exit 25;" uniquement :
./monScript.sh
echo "Code d'erreur : $?"; # Output: Code d'erreur : 25
echo "Code d'erreur : $?"; # Output: Code d'erreur : 0
Remarque : On peut voir que le deuxième "echo" renvoit "0" en code d'erreur, car "$?" renvoit le code d'erreur de la dernière commande exécutée => ici le "echo" précédent qui a correctement affiché "Code d'erreur : 25".
Pour inclure un script bash dans un autre, il est nécessaire de l'exécuter. Exemple :
my_dir="/your/path"
"$my_dir/other_script.sh"
Afin d'éviter d'avoir tout dans un même block, bash permet de créer des fonctions.
#Fonction sans argument
function exemple {
echo "Bonjour";
}
#Fonction avec 2 arguments
function exemple2 {
echo "Bonjour $1 et $2, j'ai $# arguments";
echo "Voici tous mes arguments : $*";
echo "Ou encore : $@";
}
maVariavle=$(exemple) # On peut stocker la sortie d'une fonction dans une variable
echo $maVariavle # Output: Bonjour
exemple2 A B # Remarque : Les appels se font sans parenthèses ni virgule pour séparer les arguments. Un espace suffit
# Output:
# Bonjour A et B, j'ai 2 arguments
# Voici tous mes arguments : A B
# Ou encore : A B
# Permet d obtenir la déclaration de la fonction
declare -f exemple2
#Output
#exemple2 ()
#{
# echo "Bonjour $1 et $2, j'ai $# arguments";
# echo "Voici tous mes arguments : $*";
# echo "Ou encore : $@"
#}
Les tableaux (tableaux indexés => en clé des entiers) fonctionnent presque pareil que des dictionnaires (comme des map : tableaux associatifs => en clé des entiers / chaînes de caractères).
Action / Type | Tableau | Dictionnaire |
Déclaration |
declare -a myTab | declare -A myDico |
Initialisation |
myTab=( 30 Alex ) myTab=( [0]=30 [10]=Alex ) |
myDico=( [age]=25 [10]=Alex ) |
Affichage |
echo $myTab[0] echo ${myTab[0]} |
echo $myDico[30] echo $myDico[age] echo ${myDico[age]} |
Afficher tout * |
echo ${myTab[*]} echo ${myTab[@]} |
echo ${myDico[*]} echo ${myDico[@]} |
Taille | ${#myTab[*]} | ${#myDico[*]} |
Taille d'un élément | ${#myTab[0]} | ${#myDico[age]} |
Liste des indices | ${!myTab[*]} | ${!myDico[*]} |
Remarque * : [@] ou [*] : préférer [@] entre guillemet pour garder les vraies valeurs (différencier les espaces d'un autre élément). Sans guillemet ils ont le même comportement, mais avec les guillemets, [*] renverra tout sur un seul mot et [@] renverra chaque élément comme étant un mot distinct.
Il existe plusieurs manières d'implémenter une condition (les espaces sont importants) :
if [ $MA_VARIABLE -gt 2 ] ; then # Si MA_VARIABLE greater than > 2
echo "OUI"
fi
if [ $# -lt 2 ] ; then
echo "OUI"
else
echo "NON"
fi
if [ $# -gt 2 ] ; then
echo "OUI"
elif [ $# -eq 0 ] ; then # else if
echo "PEUT-ETRE"
else
echo "NON"
fi
# Il est possible de réaliser un test avec la commande test et les []
if test $MA_VARIABLE -gt 2 ; then # Si MA_VARIABLE greater than > 2
echo "OUI"
fi
Comparateurs :
Type | opérateur | Description | Exemple |
Arithmétiques | -eq | est égale à | if [ "$a" -eq "$b" ] |
-ne | est non égale à | if [ "$a" -ne "$b" ] | |
-gt | est supérieur à | if [ "$a" -gt "$b" ] | |
-ge | est supérieur ou égale à | if [ "$a" -ge "$b" ] | |
-lt | est inférieur à | if [ "$a" -lt "$b" ] | |
-le | est inférieur ou égale à | if [ "$a" -le "$b" ] | |
< | est inférieur à | (("$a" < "$b")) | |
<= | est inférieur ou égale à | (("$a" <= "$b")) | |
> | est supérieur à | (("$a" > "$b")) | |
>= | est inférieur ou égale à | (("$a" >= "$b")) | |
Chaîne de caractère | = | est égale à (string) | if [ "$a" = "$b" ] |
== | est égale à (string, faire attention) | if [ "$a" == "$b" ] | |
!= | est non égale à (string) | if [ "$a" != "$b" ] | |
< | est inférieur à (ASCII) | if [[ "$a" < "$b" ]] if [ "$a" \< "$b" ] |
|
> | est supérieur à (ASCII) | if [[ "$a" > "$b" ]] if [ "$a" \> "$b" ] |
|
-z | chaînes est nulle ou à une taille de 0 | [ -z "$a" ] | |
-n | chaînes est non nulle et à une taille > 0 | [ -n "$a" ] | |
Fichier | -e | le fichier existe | [ -e "$a" ] |
-d | le répertoire existe | [ -d "$a" ] | |
-r | le fichier est lisible | [ -r "$a" ] | |
-o | vous être le propriétaire du fichier | [ -o "$a" ] | |
-x | le fichier est exécutable | [ -x "$a" ] |
Pour combiner les tests, on peut utiliser les opérateurs && et || avec les doubles crochets, -a (pour et) et -o (pour ou) avec les simples crochets.
Il permet généralement de gérer les paramètres d'un programme.
Exemple :
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-a1|--argument1)
ARGUMENT1="$2"
shift # past argument
shift # past value
;;
-a2|--argument2)
ARGUMENT2="$2"
shift 2 # past 2 argument
;;
--a3)
a3=YES
shift # past argument
;;
--help)
echo "how to use : ....";
//exit ;
shift # past argument
;;
*) # unknown option
echo "Error in argument with $1"
//exit 1
shift # past argument
;;
esac
done
Remarque : La commande shift permet de décaler les arguments vers la gauche. La valeur de $1 <= $2, $2 <= $3 et ainsi de suite. Par conséquent, $# est également décrémenté.
firstName1="Alex";
firstName2="Claire";
firstName3="Angel";
# Avec une liste
for firstName in $firstName1 $firstName2 $firstName3; do
echo $firstName;
done
# Output:
# Alex
# Claire
# Angel
# Avec un retour d'une commande
for item in $(ls); do
echo item: $item;
done
# Output:
# item: fileA.txt
# item: fileB.txt
# item: fileC.txt
# item: folderA
# Avec un retour d'une commande #2 (séquence de nombre)
for i in $(seq 1 5); do
echo $i;
done
# Output:
# 1
# 2
# 3
# 4
# 5
# Boucle avec itération
for ((it=0; it<= 5; it++)); do
echo $it;
done
# Output:
# 1
# 2
# 3
# 4
# 5
declare -a myArray;
myArray=( Alex Claire Angel );
for firstName in "${myArray[@]}"
do
echo "${firstName}"
done
# Output:
# Alex
# Claire
# Angel
it=0;
while [ $it -lt 5 ] ; do
echo "it : ${it}";
it=$(( $it + 1 )) # egale a ((it++))
done
# Output :
# it : 0
# it : 1
# it : 2
# it : 3
# it : 4
while :
do
read -p "Entrer votre age : " age # Lit sur la sortie standard
echo "Vous avez ${age} ans";
if [ ${age} -ge 100 ] ; then
echo "Vous etes agee";
break;
else
echo "Vous n'etes pas assez age"
fi
echo "Je ne sortirais pas d'ici sans avoir rencontre quelqu'un de 100 ans ou plus.";
done
# Output
# Entrer votre age : 30
# Vous avez 30 ans
# Vous n'etes pas assez age
# Je ne sortirais pas d'ici sans avoir rencontre quelqu'un de 100 ans ou plus.
# Entrer votre age : 101
# Vous avez 101 ans
# Vous etes agee
# Lire un fichier ligne par ligne
while read LINE; do
echo $LINE;
done < fichier.txt
# Output
# Contenu de la premiere ligne
# Contenu de la deuxieme ligne
# contenu de la troisieme et derniere ligne du fichier.
Commande | Arguments | Objectif |
basename | cheminVersFichier | Affiche le nom du fichier |
chmod |
fichier(s)/dossier(s) |
Permission d'accès fichier |
chown |
fichier(s)/dossier(s) |
Changement du propriétaire et du groupe lié au fichier/dossier |
cut |
<col> <fic>
|
Extrait une ou plusieurs colonnes d'un fichier. Exemple :
|
date | '+%Y-%m-%d %H:%M:%S.%N' | Affiche la date : 2020-01-31 22:30:46.900886000 |
'+%A %d-%B, %Y' | Autre format | |
diff | fic1 fic2 | Affiche les différences entre fic1 et fic2 |
dirname | pathToFichier | Affiche le chemin d'accès au fichier |
du |
|
Statistiques sur l'utilisation du disque. Affiche les fichiers et répertoires (récursivement) du répertoire courant et leurs poids associés. (Exemple: du --count-links --dereference --human-readable --max-depth=1) |
df | -h (human readable) : améliore la lisibilité sur les poids des fichiers | Quantité d'espace occupé des systèmes de fichiers. |
find |
répertoire
|
Recherche des fichiers ou des répertoires satisfaisant les paramètres. Exemple : find / -type f # Recherche tous les fichiers du system. |
grep |
motif fichier/dossier
|
Recherche dans des fichiers le motif dans le fichier ou le dossier fourni |
kill | -9 PID | Kill le processus ayant le pid PID (SIGKILL) |
killall | nom | Kill les processus ayant le nom fourni |
ln | fic1 fic2 | Lien physique du fic1 vers fic2 |
locate | monFichier.txt | Localise l'emplacement de "monFichier.txt" |
man | commande | Affiche le manuel de la commande |
ps | aux | Liste les processus (Cf. top/ htop) |
read | a b c |
Lire l'entrée standard. Ici attend 3 données, exemple A\ A b C ==> $a = "A A", $b = b, $c = C |
sort | -r (reverse) : décroissant | Trie de ligne (ordre alphabétique croissant par défaut) |
-n : compare selon la valeur numérique de la chaîne | ||
tar | -cf dest.tar source | Créer une archive |
-xf archive.tar | Désarchiver | |
-xf archive.tar -C /tmp | Désarchiver dans le dossier /tmp | |
-czvf dest.tar.gz source | Créer et compresser une archive | |
-xvzf archiver.tar.gz | Désarchiver et décompresser | |
-xvzf archiver.tar.gz -C /tmp | Désarchiver et décompresser dans le dossier /tmp | |
time | monScript.sh | Affiche le temps utilisé par le script |
tr | liste1 liste2 | Remplace liste1 par liste2 issue de l'entrée standard et renvoie sur la sortie standard. liste1 et liste2 sont des listes de caractères. |
-d : supprime les caractères de liste1 | ||
-s : supprime les caractères de liste1 répétée | ||
uniq | -d : ne garde que les lignes dupliqués | Ne garde qu'une seule occurrence des lignes en doublons (distinct) (cat fic.txt | uniq) |
- c : préfixe les lignes par leurs nombres d'occurrences | ||
-i : ignore la casse | ||
-u : garde uniquement les lignes uniques | ||
wc | -l (Line) -c(Character) -w (Word) | Compte le nombre de lignes, mots ou caractères d'un texte (cat fix.txt | wc -l) |
wich | maCommande | localise le fichier contenant maCommande |
zip / unzip | zipper ou dézipper |
Raccourcis | Objectif |
ctrl + z + écrire bg |
Mise en arrière-plan de la tâche active Commande inverse : jobs, fg%NumJobs |
ctrl + c | Envoie du signal SIGTERM (ferme le processus) |
ctrl + z | Freeze le processus |
ctrl + l | Même action que la commande "clean" |
ctrl + d | Écrit au clavier EOF (End Of File). |
ctrl + r | Regarde dans l'historique des commandes (Cf. history) |
!maCommande | Exécute la dernière commande commençant par maCommande |
LauLem.com - Conditions Générales d'Utilisation - Informations Légales - Charte relative aux cookies - Charte sur la protection des données personnelles - A propos