<commit_before># FONCTIONNEMENT DU SHELL



##1. Phase de saisie

**CMD UNIX SIMPLE**

cmd [arg1 arg2 arg3 ....] [Redirection]

##2. Phase de substitution

###a) Remplacement de variable

####$Variable

```bash
FOO = XIII
echo FOO
echo $FOO
```

```bash
RAC=/bin
echo $RAC
```
Cela affiche **/bin**


```bash
RAC=/bin
echo $RAC/pwd
```
Cela affiche **/bin/pwd**, pour ensuite exécuter la commande répertoriée dans le répertoire bin.

####Vecteur de variable

**set** mot1 mot2 mot3 ...

```bash
sgoncal1@goya:~$ set 43 BLEU XIII
sgoncal1@goya:~$ echo $1
43
sgoncal1@goya:~$ echo $2
BLEU
sgoncal1@goya:~$ echo $3
XIII
sgoncal1@goya:~$ echo $*
43 BLEU XIII
sgoncal1@goya:~$ echo $@
43 BLEU XIII
sgoncal1@goya:~$ echo $#
3
```

> NOTE : # contient de nombre d'éléments dans le vecteur.

```bash
sgoncal1@goya:~$ echo $1 , $2 , $3
43 , BLEU , XIII
sgoncal1@goya:~$ shift
sgoncal1@goya:~$ echo $1 , $2 , $3
BLEU , XIII ,
sgoncal1@goya:~$ shift
sgoncal1@goya:~$ echo $1 , $2 , $3
XIII , ,
```
> NOTE : shift décale la valeur des variables vers la gauche.

```bash
sgoncal1@goya:~$ echo $0
bash
sgoncal1@goya:~$ echo $?
0
sgoncal1@goya:~$ echo $$
4206
sgoncal1@goya:~$ echo $!
4264
```
+ **0** contient le nom de processus qui a exécuté la commande (OU) le nom de la commande courante. Ici c'est **bash**
+ **?** contient l'erreur lié à la dernière commande.
+ **$** contient le pid du processus du shell.
+ **!** contient le pid du dernier processus détaché, c'est à dire hors shell
+ **#** contient le nombre d'arguments.

####Prefixe TMP


```bash
sgoncal1@goya:~$ PREFIXE="TMP"
sgoncal1@goya:~$ N1=$PREFIXE1
sgoncal1@goya:~$ N2=$PREFIXE2
sgoncal1@goya:~$ echo $N1

sgoncal1@goya:~$ echo $N2

sgoncal1@goya:~$ PREFIXE="TMP"
sgoncal1@goya:~$ N1=${PREFIXE}1
sgoncal1@goya:~$ N2=${PREFIXE}2
sgoncal1@goya:~$ echo $N1
TMP1
sgoncal1@goya:~$ echo $N2
TMP2
```
> NOTE : les {} premettent de dire que l'on demande le PREFIXE.

###b) Remplacement de commandes

####$(commande simple)

```bash
sgoncal1@goya:~$ echo $(date) : $(who | wc -l) utilisateur sur $(hostname)
mardi 10 octobre 2017, 14:49:21 (UTC+0200) : 1 utilisateur sur goya
```
**ATTENTION** : ce n'est pas la commande echo qui effectue les substitution mais le **SHELL** avant d'exécuter la commande echo !

Pour récupérer seulement l'heure :

```bash
sgoncal1@goya:~$ date
mardi 10 octobre 2017, 14:54:12 (UTC+0200)
sgoncal1@goya:~$ set $(date) ; echo $5
14:55:57
```
Ainsi on peut créer de nouvelles commandes :

```bash
sgoncal1@goya:~$ alias heure='set $(date) ; echo $5'
sgoncal1@goya:~$ heure<commit_msg>Update shell_seb.md<commit_after># FONCTIONNEMENT DU SHELL



## 1. Phase de saisie

**CMD UNIX SIMPLE**

cmd [arg1 arg2 arg3 ....] [Redirection]

## 2. Phase de substitution

### a) Remplacement de variable

#### $Variable

```bash
FOO = XIII
echo FOO
echo $FOO
```

```bash
RAC=/bin
echo $RAC
```
Cela affiche **/bin**


```bash
RAC=/bin
echo $RAC/pwd
```
Cela affiche **/bin/pwd**, pour ensuite exécuter la commande répertoriée dans le répertoire bin.

#### Vecteur de variable

**set** mot1 mot2 mot3 ...

```bash
sgoncal1@goya:~$ set 43 BLEU XIII
sgoncal1@goya:~$ echo $1
43
sgoncal1@goya:~$ echo $2
BLEU
sgoncal1@goya:~$ echo $3
XIII
sgoncal1@goya:~$ echo $*
43 BLEU XIII
sgoncal1@goya:~$ echo $@
43 BLEU XIII
sgoncal1@goya:~$ echo $#
3
```

> NOTE : # contient de nombre d'éléments dans le vecteur.

```bash
sgoncal1@goya:~$ echo $1 , $2 , $3
43 , BLEU , XIII
sgoncal1@goya:~$ shift
sgoncal1@goya:~$ echo $1 , $2 , $3
BLEU , XIII ,
sgoncal1@goya:~$ shift
sgoncal1@goya:~$ echo $1 , $2 , $3
XIII , ,
```
> NOTE : shift décale la valeur des variables vers la gauche.

```bash
sgoncal1@goya:~$ echo $0
bash
sgoncal1@goya:~$ echo $?
0
sgoncal1@goya:~$ echo $$
4206
sgoncal1@goya:~$ echo $!
4264
```
+ **0** contient le nom de processus qui a exécuté la commande (OU) le nom de la commande courante. Ici c'est **bash**
+ **?** contient l'erreur lié à la dernière commande.
+ **$** contient le pid du processus du shell.
+ **!** contient le pid du dernier processus détaché, c'est à dire hors shell
+ **#** contient le nombre d'arguments.

#### Prefixe TMP


```bash
sgoncal1@goya:~$ PREFIXE="TMP"
sgoncal1@goya:~$ N1=$PREFIXE1
sgoncal1@goya:~$ N2=$PREFIXE2
sgoncal1@goya:~$ echo $N1

sgoncal1@goya:~$ echo $N2

sgoncal1@goya:~$ PREFIXE="TMP"
sgoncal1@goya:~$ N1=${PREFIXE}1
sgoncal1@goya:~$ N2=${PREFIXE}2
sgoncal1@goya:~$ echo $N1
TMP1
sgoncal1@goya:~$ echo $N2
TMP2
```
> NOTE : les {} premettent de dire que l'on demande le PREFIXE.

### b) Remplacement de commandes

#### $(commande simple)

```bash
sgoncal1@goya:~$ echo $(date) : $(who | wc -l) utilisateur sur $(hostname)
mardi 10 octobre 2017, 14:49:21 (UTC+0200) : 1 utilisateur sur goya
```
**ATTENTION** : ce n'est pas la commande echo qui effectue les substitution mais le **SHELL** avant d'exécuter la commande echo !

Pour récupérer seulement l'heure :

```bash
sgoncal1@goya:~$ date
mardi 10 octobre 2017, 14:54:12 (UTC+0200)
sgoncal1@goya:~$ set $(date) ; echo $5
14:55:57
```
Ainsi on peut créer de nouvelles commandes :

```bash
sgoncal1@goya:~$ alias heure='set $(date) ; echo $5'
sgoncal1@goya:~$ heure
{'fraction_non_alphanumeric': 0.16848461238800155, 'fraction_numerical': 0.049863654070899883, 'mean_word_length': 4.895522388059701, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7039903', 'n_tokens_mistral': 2338, 'n_tokens_neox': 2250, 'n_words': 644}