FAQ
Bash, script, shell, Unix, … Si tout cela n’a aucun sens pour vous, vous êtes dans la bonne page !
Les shells sont des interpréteurs, c’est-à-dire que chaque commande saisie par l’utilisateur (ou lue à partir d’un fichier) est syntaxiquement vérifiée puis exécutée.
Bash (Bourne-Again Shell) est le shell le plus courant sur Unix et possède un double aspect :c’est un environnement de travail où l’on peut, entre autres, gérer les processus, modifier le texte de la commande courante, initialiser les variables de configuration (PATH, HOME, etc.)
c’est également un langage de programmation (qui intègre donc des notions de variable, de structure de contrôle, de fonction, d’opérateur arithmétique, …) avec ses propres spécificités.
Syntaxe d’une commande UNIX :
Un script bash est un fichier de type texte contenant une suite de commandes shell, exécutables par l'interpréteur (ici le programme /bin/bash, spécifié au début de chaque script).
Pour retrouver des informations sur les commandes via le shell :
$
Si l’on veut seulement voir les différentes options possibles pour une commande :
$
permet de lire un fichier ligne par ligne. Si un fichier de sortie est spécifié par un chevron (commande du type
permet de se déplacer dans les répertoires.
(. est le répertoire courant ;
affiche le contenu se trouvant entre guillemets.
boucle qui effectuera les instructions données pour chaque élément de l'ensemble défini.
combinées, ces deux commandes signifient "affiche le contenu du début du fichier à partir de la ligne X ; et ne garde que Y ligne(s)" (si Y=1, cette combinaison bien pratique permet de n'afficher qu'une seule ligne précise d'un petit fichier de texte).
structure de condition ; par défaut,
liste les fichiers contenus dans un répertoire (si rien n’est précisé, le répertoire courant).
permet de créer un répertoire.
affecte le nom d’un chemin à la variable.
supprime les fichiers/dossiers spécifiés.
permet d’éxecuter un script bash dans le shell.
permet de trier les lignes d'un fichier.
Ce logiciel supporte différents protocoles comme HTTP, HTTPS et FTP.
Si un téléchargement échoue suite à un problème réseau, il réessayera jusqu'à ce que l'intégralité du fichier soit téléchargée.
Si le serveur supporte la reprise, il lui demandera de reprendre là où le téléchargement s'est interrompu.
Syntaxe de la commande :
Options utilisées dans notre script :
Exemple :
Pour plus d’informations…
Syntaxe de la commande :
Options utilisées dans notre script :
Exemple :
Pour plus d’informations…
! Attention ! Le contexte est défini en nombre de lignes et non en nombre de mots.
Syntaxe de la commande :
Options utilisées dans notre script :
Exemple :
Pour plus d’informations…
Syntaxes de la commande :
Options utilisées dans notre script :
Flags utilisés :
Remarque :On peut modifier les séparateurs "/" par ‘#’, lorsque l’on utilise "/" dans les chaînes de caractères à trouver ou à remplacer pour éviter de le despécialiser :
Pour utiliser le contenu d'une variable comme chaîne de caractères, on l’entoure de guillemets doubles au lieu des guillemets simples.
Dans notre cas, nous avons également dû ajouter des guillemets simples autour de la variable (pour des raisons encore inconnues !)
Exemple : Pour plus d’informations…
Syntaxe de la commande :
Options utilisées dans notre script :
Exemple : Pour plus d’informations…
Modifier les propriétés de Cygwin pour qu'il accepte le mode d'édition rapide (cliquer droit sur la fenêtre ; aller dans 'propriétés', puis dans l'onglet 'options' et cocher la case « mode d’édition rapide »)
Copier l’adresse de la barre de navigation du répertoire voulu (sous Windows).
Avec un clic droit, le coller dans Cygwin sans oublier de mettre l’adresse copiée entre guillemets (puisque syntaxe des chemins différente sous Unix).
Taper sur Entrée…
C’est magique !
Il vous faut donc utiliser un utilitaire aux effets extraordinaires :
Sinon, vous pouvez toujours écrire votre script dans un éditeur de texte plus intelligent (comme Notepad++ par exemple), qui possède un outil de conversion intégré (menu "Format").
Si vous êtes dans cette situation, voici la procédure à suivre :Relancer le setup de Cygwin
Choisir l’installation depuis le téléchargement par Internet (Install from Internet)
Suivant/suivant/suivant/suivant/suivant
Dans la fenêtre, cliquer sur le bouton "View" (en haut à droite) une fois pour être en mode Full (et donc avoir une liste complète), puis choisir le(s) package(s) (dernière colonne) correspondant à la(/les) commande(s) manquante(s).
Cliquer sur "Skip" (2ème colonne New) du ou des package(s) voulu(s) et continuer à cliquer jusqu’à avoir la version voulue de la commande (ou jusqu’à annuler en retombant sur "Skip"). Laisser la case de la colonne Bin ? cochée (fichier binaire).
Puis cliquer sur suivant pour démarrer l’installation !
Bash
Sous Unix, un shell est l’interpréteur de commandes qui fait office d'interface entre l'utilisateur et le système d’exploitation.Les shells sont des interpréteurs, c’est-à-dire que chaque commande saisie par l’utilisateur (ou lue à partir d’un fichier) est syntaxiquement vérifiée puis exécutée.
Bash (Bourne-Again Shell) est le shell le plus courant sur Unix et possède un double aspect :
Syntaxe d’une commande UNIX :
- [/chemin]
nom_commande
[-options]
[fichier(s) ou répertoire(s)]Un script bash est un fichier de type texte contenant une suite de commandes shell, exécutables par l'interpréteur (ici le programme /bin/bash, spécifié au début de chaque script).
NB :
$
man
nom_commande (puis taper sur espace pour faire défiler les sections)$
nom_commande
-h
(ou--help
)______________________________________________________________
Commandes de base
Par ordre alphabétique :
cat
fichier :permet de lire un fichier ligne par ligne. Si un fichier de sortie est spécifié par un chevron (commande du type
cat
fichier_in > fichier_out), chaque ligne du fichier d'entrée sera "lue" et stockée dans le fichier de sortie spécifié (ce qui permet de concaténer plusieurs fichiers textuels, par exemple).cd
chemin (relatif ou absolu, selon où l’on se trouve à ce moment-là) :permet de se déplacer dans les répertoires.
(. est le répertoire courant ;
cd
.. remonte d’un cran ; ../.. remonte de deux crans ; etc.).echo
" " :affiche le contenu se trouvant entre guillemets.
for
élémentin
ensemble{
instructions}
:boucle qui effectuera les instructions données pour chaque élément de l'ensemble défini.
head -n
X fichier |tail
-Y :combinées, ces deux commandes signifient "affiche le contenu du début du fichier à partir de la ligne X ; et ne garde que Y ligne(s)" (si Y=1, cette combinaison bien pratique permet de n'afficher qu'une seule ligne précise d'un petit fichier de texte).
if
conditionthen
action à exécuter :structure de condition ; par défaut,
if
effectue l'action indiquée si la condition renvoie un code retour 0 (est vraie).else
action à exécuter :alternative si la condition du premier
if
n'est pas remplie.elif
condition2then
action2 à exécuter :rajoute une nouvelle condition alternative (similaire à
else if
).fi
:pour terminer la structure
if
.-s
fichier :option qui renvoie une valeur VRAIE si un fichier existe et a une taille de plus de 0.
-n
$variable ou string :option qui renvoie une valeur VRAIE si la chaîne de caractères n'est pas de longueur 0.
ls
chemin :liste les fichiers contenus dans un répertoire (si rien n’est précisé, le répertoire courant).
mkdir
(make directory) :permet de créer un répertoire.
-p
:ne considère plus comme une erreur la présence d'un dossier qu'on essaie de lui faire créer.
read
chemin variable :affecte le nom d’un chemin à la variable.
rm
fichier ou dossier :supprime les fichiers/dossiers spécifiés.
-r
ou-R
:permet d'effacer récursivement les sous-répertoires.
-f
:ne considère plus comme une erreur l'absence d'un dossier ou d'un fichier qu'on essaie de lui faire supprimer.
sh
nom_script.sh :permet d’éxecuter un script bash dans le shell.
sort
fichier :permet de trier les lignes d'un fichier.
-u
:permet de n'afficher que la première séquence de lignes considérées comme égales (dans notre script, ne garder qu'une seule fois l'encodage s'il a été récupéré en plusieurs occurrences).
______________________________________________________________
Commandes spécifiques
Wget
Cette commande appelle un logiciel de téléchargement de pages Web (sans interaction avec l’utilisateur) qui permet de sauvegarder localement et à l’identique le contenu d’une URL.Ce logiciel supporte différents protocoles comme HTTP, HTTPS et FTP.
Si un téléchargement échoue suite à un problème réseau, il réessayera jusqu'à ce que l'intégralité du fichier soit téléchargée.
Si le serveur supporte la reprise, il lui demandera de reprendre là où le téléchargement s'est interrompu.
Syntaxe de la commande :
wget
[-option(s)]
[URL]Options utilisées dans notre script :
-O
fichier :Ecriture en sortie du contenu de la page Web dans fichier (peut être précédé d’un chemin).
! Attention ! Si fichier existe déjà, il sera remplacé.
Exemple :
Pour plus d’informations…
_______________________
Lynx
C’est un navigateur en ligne de commandes qui fonctionne en mode texte. L’intérêt de ce navigateur est de pouvoir mieux manipuler le contenu textuel d’une page Web.Syntaxe de la commande :
lynx
[-option(s)]
[chemin ou URL]Options utilisées dans notre script :
-dump
page_web.html > dump_texte.txt :permet de rediriger le contenu textuel de la page vers un fichier texte. L’input peut très bien être une adresse URL, mais pour notre projet, nous avons déjà aspiré les pages en local (avec wget).
-nolist
:permet de supprimer les liens présents dans la page Web.
--display_charset=
nomMIME :permet de choisir l’encodage voulu pour l’affichage des caractères.
Exemple :
Pour plus d’informations…
_______________________
Egrep
Affiche les lignes correspondant à un motif, donné sous forme d’expression régulière. Elle nous permet donc de filtrer le texte et de ne garder que le contexte voulu.! Attention ! Le contexte est défini en nombre de lignes et non en nombre de mots.
Syntaxe de la commande :
egrep
[-option(s)]
'motif' [fichier]Options utilisées dans notre script :
-A
num :affiche le nombre de lignes supplémentaires après la ligne correspondante.
-B
num :affiche le nombre de lignes supplémentaires avant la ligne correspondante.
-i
:permet d’ignorer la casse (différences majuscules/minuscules).
-q
:Silence. Ne pas afficher les résultats normaux (rien n’est affiché dans la console si egrep fonctionne).
-o
:permet d’afficher seulement le motif recherché.
-m
num :permet de n’extraire que la xième ligne voulue où l’occurrence du motif est trouvée.
Exemple :
Pour plus d’informations…
_______________________
Sed
C'est un éditeur de flux qui permet la transformation de texte. Associé à la commandes
/…/…/, il permet de substituer une chaîne de caractères par une autre.Syntaxes de la commande :
sed
[-option(s)]
's
/cdc_à_remplacer/par_celle_ci/flags
'Options utilisées dans notre script :
-r
:permet d’utiliser des expressions régulières.
-e
:permet d’ajouter un script aux commandes à exécuter.
Flags utilisés :
g
:permet le remplacement de la chaine de caractères donnée pour toutes les occurrences trouvées dans le texte.
i
:permet d’ignorer la casse.
Remarque :
sed
's
#cdc à remplacer#par celle-ci#gi
'Dans notre cas, nous avons également dû ajouter des guillemets simples autour de la variable (pour des raisons encore inconnues !)
sed
's
#'"$variable"'#à remplacer_par'"$variable"'#ig
'Exemple : Pour plus d’informations…
_______________________
Iconv
C'est un programme qui convertit un texte d'un encodage vers un autre.Syntaxe de la commande :
iconv
[option(s)]
[fichiers d'input et d'output]Options utilisées dans notre script :
-f
(--from charset
) :spécifie l'encodage du fichier d'entrée.
-t
(--to charset
) :spécifie l'encodage du fichier de sortie.
-c
:ne pas traîter les caractères non reconnus plutôt que de renvoyer une erreur de conversion.
Exemple : Pour plus d’informations…
______________________________________________________________
Astuces
Une liste non exhaustive de petits trucs qui peuvent toujours servir !Comment ne plus taper un chemin ?
Pourquoi mon script ne marche pas chez moi ? (mais pourtant très bien à l’ILPGA !)
Rentré(e) à la maison, le shell ne cesse de vous dire qu’il y a des problèmes de $‘\r’ dans votre script ? Cela vient du fameux problème de compatibilité des retours à la ligne entre Windows et Unix !Il vous faut donc utiliser un utilitaire aux effets extraordinaires :
- $
dos2unix
nomfichier.*unix2dos
.Sinon, vous pouvez toujours écrire votre script dans un éditeur de texte plus intelligent (comme Notepad++ par exemple), qui possède un outil de conversion intégré (menu "Format").
Comment ça, "Command not found" ???
Ce qu’installe Cygwin lors de l’exécution du setup n’est pas la version « complète » : il y manque un certain nombre de modules qui doivent être installés manuellement par la suite si besoin est.Si vous êtes dans cette situation, voici la procédure à suivre :