Shell (coquille) ou interprèteur de commande (comme le command.com de DOS)

Chaque utilisateur à ses préférences dans le fichier .bash-profile (qui est dans son répertoire d'utilisateur)

/etc/profile est le fichier de préférences globales de BASH

Touche de raccourci :

<SHIFT>+<PAGEUP>   : Défile les commandes du haut
<SHIFT>+<PAGEDOWN> : Défile les commandes du bas

<ALT>+<F1> à <ALT>+<F6> : Change de Terminal [virtuel]. 
                  On peut donc se connecter sur plusieurs comptes différents ou 
                  sur le même plusieurs fois sur la même ordinateur.

<ALT>+'L' : efface l'écran
commande <TAB> : complète automatiquement un nom de fichier... 
                 pressez une ou deux fois la touche <TAB>

Caractère de subtitution, de condition, etc...

~   : répertoire de l'usager courant [fichier /etc/passwd]
-   : répertoire précédent
*   : remplace 0 ou plusieurs caractères
?   : remplace 1 caractère
[]  : remplace par les caractères dans les braquettes individuellement
      Exemple: tp[12] donne la même chose que tp1 tp2
[-] : remplace par les caractères dans les braquettes en suivant une intervalle
      Exemple: tp[2-5] donne la même chose que tp2 tp3 tp4 tp5
[,] : remplace par les caractères dans les braquettes, puis par les autres 
      après la virgule.. etc...
      Exemple: tp[1-3,5-9] donne la même chose que: 
               tp15, tp16, tp17, tp18, tp18
               tp25, tp26, tp27, tp28, tp38
               tp35, tp36, tp37, tp38, tp28
[!] : remplace par tout à part les caractères dans les braquettes
      Exemple: tp[!1] donne tp2, tp3, tp4, etc... mais pas tp1
{,} : remplace par des chaînes séparés par des virgules
      Exemple: ri{delle,gole,dicule} donne ridelle rigole ridicule

>   : modifie la sortie d'une commande
      Exemple: ls -R > fichier    écrit le résultat de la commande ls -R vers fichier (en l'écrasant)
>>  : modifie la sortie d'une commande (en écrivant à la suite)
      Exemple: ls -R >> fichier    écrit le résultat de la commande ls -R vers fichier sans l'écraser
<   : modifie l'entrée standard
      Exemple: rm / -R < oui      efface tous les fichiers récursivement en
      envoyant la réponse 'oui' à la commande (!!! efface linux à ne pas faire !!!)

&   : Exécute une commande en arrière plan

|   : tube (pipe) redirige la sortie d'une commande vers l'entrée d'une autre
      Exemple: ls | sort | more
               envoie le résultat de 'ls' (sortie) vers la commande 'sort' (entrée)
               qui la redirige (sortie) vers la commande 'more' (entrée)

&&  : exécute une commande si la commande précédante a retourné vrai
      Exemple: test -w tp1 && echo "On peut écrire dans le fichier tp1"

||  : exécute une commande si la commande précédante a retourné faux
      Exemple: test -w tp1 !! echo "On ne peut pas écrire dans le fichier tp1"

!   : contraire d'une condition logique (!vrai = faux, !faux = vrai)

CANAUX D'ENTRÉES/SORTIES STANDARDS:
numero    nom du canal                      C/C++
#0      - clavier                           stdin   cin
#1      - écran                             stdout  cout
#2      - fenêtre d'affichage d'erreur      stderr  cerr

Exemple de redirection vers les canaux: 
ls *A 2 > LISTE     : affiche tous les fichiers finissant par 'A' et envoie 
                     toutes les erreurs (canaux 2) vers le fichier LISTE
ls *A 2 > /dev/null    : inscrit dans le périphérique null (trou noir) les erreurs.
  

Programmation

Structure de Condition

if [ condition ]; then uneInstruction; fi

if [ condition ]
then
   instruction;
   instruction;
fi

if [ condition ]
then
   instruction;
   instruction;
else
   instruction;
fi

if [ condition ]; then
 instruction;
elif 
 instruction;
else
 instruction;
fi

Référence pour les []
Référence pour opérateur de comparaison
if [ arg1 -eq arg2 ]; then NombreEstÉgalÀ; fi
if [ arg1 -ne arg2 ]; then NombreEstDifférentDe; fi
if [ $string1 == $string2 -a $string2 == $string3 ];  then
# si chaine1 est égale a chaine2 ET (-a and) chaine2 est egale a chaine3
fi
if [ $string1 == $string2 -o $string2 == $string3 ];  then
# si chaine1 est égale a chaine2 OU (-o or) chaine2 est egale a chaine3
fi

case $var in
choix1)
 # si $var est égale à choix1 alors:
 instruction1
 ;;
choix2 | choix3)
 # si $var est égale à choix2 ou à choix3
 instruction2ou3
 ;;
esac
 

Remarque: il ne faut pas oublier les espaces entre les crochets [ ] du if et les opérateurs (-eq, -a, ==). Car if [ 1 -eq 1 ] est vrai et if [1 -eq 1] est faux.

Entree/sortie

Sortie:
echo "chaine de caractere"
VARIABLE1=allo
echo "chaine avec une $VARIABLE1"
VARIABLE2=test
echo $VARIABLE2

Entrée:
read nomvariable
echo $nomvariable

Caractères spéciaux

Son de cloche

echo $'\a';
# ou 
echo -e "\a";

# changer la fréquence du son:
echo -e "\33[10;FRÉQUENCE_en_Hertz]\33[11;DURÉE_EN_MilliSeconde]"
# Fréquence et durée par défaut:
echo -e "\33[10;750]\33[11;125]"
 

Invite

2004/04/03

J'étais fatigué d'avoir l'ancienne invite: [\t<\u>\W]\$

Voici ma nouvelle invite: export PS1="\t <\u>[\W]\$" placée à la fin du fichier ~/.bashrc.

Erreur de bash

2005/02/05

bash: child setpgid (8026 to 8026): Aucun processus de ce type

Corrigé sur glibc-2.3.3-63

Ajouter votre commentaire