Outils pour utilisateurs

Outils du site


workshop_shell

Ceci est une ancienne révision du document !


Workshop Shell Unix (Interpréteur de commandes)

Guidelines pour l'atelier

  • Deconseiler de prendre des notes le workshop est disponible sur le wiki.
  • Proposer d'interrompre et poser des questions à chaud.
  • Demander à l'assemblé ce que va produire une ligne commande avant de l'exécuter.

Intro: shell / terminal

On désigne souvent le shell par :

  • le terminal
  • la console
  • le shell
  • le bash

Le shell Unix est une Interface en Ligne de Commande (CLI) qui permet à un utilisateur d’interagir avec un système d'exploitation Unix en entrant du texte. Le premier shell Unix date de 1971, et depuis, plusieurs sont nés avec chacun ses subtilités, ses avantages, et ses préférences. Dans les grandes lignes, tous les shell Unix se ressemblent. Dans la suite de cet article nous le désignerons simplement le shell.

Exemples de shell

  • sh (Bourne shell) le plus répendu
  • bash (Bourn again shell) le plus populaire ?
  • zsh le plus geek ?
  • ksh (Korn shell)
  • ...

Présentation d'une ligne de commande

COMMANDE [ESPACE] ARGUMENT_1 [ESPACE] ARGUMENT_2 [ESPACE] ... ARGUMENT_N

Présentation avec GUI ouvert.

pwd
cd /tmp
pwd
cd
pwd
cd -
pwd
cd
cd ~
pwd
ls
ls -a

Manipulation des fichiers : touch ; cp ; mv ; rm ; mkdir

Présentation avec GUI ouvert.

touch foo
cp foo bar
mv bar baz
rm foo
mkdir pif
mkdir -p paf/pouf

Permissions des fichiers : ls -l ; chmod ; chown

ls -l foo
chmod u-r foo
ls -l foo
sudo chown root:root foo
ls -l

Obtenir de l'aide : man ; help

La commande man permet d'obtenir de l'aide sur les programmes installés. On peut rechercher le mot clé "foo" dans le manuel en tappant "/foo".

man man

L'aide des commandes internes au shell n'est pas disponible dans le manuel man. La commande help permet d'obtenir une aide sommaire sur les commandes du shell. Cette commande n'est pas disponible dans tous les shell : sur zsh elle est remplacée par run-help.

help
help cd

Administration : ps ; top ; du ; df ; free ; mount

id
last
ps u
ps aux
uptime
top
du -h
df -h
free -h
mount

Expansion : * ? ~ {1..5} {Z..A}

Attention les expansions dependent beaucoup du shell (sh, bash, zsh, ...) L'expansion des arguments a lieu avant d'executer la commande.

rm -rf work1 ; mkdir work1 ; cd work1
touch foo bar baz
ls f*
ls b*
ls b?z
echo {A..C}

IO (Entrées Sorties) (redirection / pipelines) : > >> < << 2> |

TODO: Utiliser des schéma

Ecriture dans fichier : >

rm -rf work2 ; mkdir work2 ; cd work2
echo "Hello World" > foo
cat foo
> foo
cat foo

Ecrire à la fin d'un fichier : >>

> bar
echo hello > bar
cat bar
echo world >> bar
cat bar

Rediriger l' entree : <

Lecture de l'entrée depuis un fichier.

read txt ; echo "$txt"
echo "Hello world !" > foo
read txt < foo ; echo "$txt"

Ecrire sur la sortie d'erreur : >&2

echo "sur la sortie standard"
>&2 echo "sur la sortie d'erreur"

Rediriger les sorties : > 2> 2>&1

echo "pif" > stdout
>&2 echo "paf" 2> stderr
>&2 echo "pouf" > stdout 2>&1

Pipeline (chaîner des programmes) : |

cat bar | grep "lo"

Logique : ; && ||

echo "un" ; echo "deux"
echo "OR_1" || echo "OR_2"
echo "AND_1" && echo "AND_2"
false ; echo "RC=$?"
true || echo "second statement" ; echo "RC=$?"
false || echo "second statement" ; echo "RC=$?"
true && echo "second statement" ; echo "RC=$?"
false && echo "second statement" ; echo "RC=$?"

Interpretation des variables : $USER $PATH $PS1 $?

echo $PATH
echo $HOME
echo $USER
echo "$USER"
echo '$USER'
echo '"$USER"'
echo "'$USER'"
export
echo $PS1
echo $?
echo $!

Il existe une priorité entre simple et double quotte. Une variable ne sera jamais interprété entre simple quottes sauf si englobé entre double quottes.

Un peu de recul : execution des commandes

On peut exécuter les commandes intégrés au shell ou les programmes executables.

which cd ; echo $?
which pwd ; echo $?
ls -l /usr/bin/pwd

Pour exécuter un programme il faut qu'il soit exécutable puis il faut tapper son nom dans l'invite de commande suivi de entrer.

/usr/bin/ls
ls
echo $PATH
PATH="/tmp"
ls
which ls
/usr/bin/ls
cd /usr/bin
ls
./ls

Scripts : philosophie tests loops fonctions

Fil rouge : un script pour trier ses photos

  • variables
  • conditions
  • fonctions
  • boucles
  • return code (exit)

Philosophie UNIX

  • Écrivez des programmes qui effectuent une seule chose et qui le font bien.
  • Écrivez des programmes qui collaborent.
  • Écrivez des programmes pour gérer des flux de texte [en pratique des flux d'octets], car c'est une interface universelle.
workshop_shell.1699091450.txt.gz · Dernière modification : 2023/11/04 09:50 de bigMax