# Variables





#### Assignation

```bash
varname=value

echo $varname
```


Si une variable n'a pas été affectée avant, elle sera vide (pas d'erreur).

```bash
echo $varname
varname=value
echo $varname

<vide>
value
```



#### Declarer

restreint la valeur de la variable à l'option

```bash
declare option variablename
```

option peut être:

- -r read only variable
- -i integer variable
- -a array variable
- -f for funtions
- -x declares and export to subsequent commands via the environment.

```bash
declare -a z

# z sera un tableau
```



#### Variable locale

la portée de la variable reste à l'instérieur de la finction

```bash
ma_fonction() {
	local lvar="Local content"
}
```



#### Variable globale (environment variables)

la variable est disponible à tous les scripts

```bash
$ printenv
LC_TERMINAL_VERSION=3.4.19
COLORFGBG=15;0
ITERM_PROFILE=access_log
XPC_FLAGS=0x0
SHELL=/bin/zsh
```



#### Test si la variable est un entier

```bash
[[ $1 == ?(-)+([[:digit:]]) ]] && echo "$1 is an integer"
```



#### Incrémenter une variable:

```bash
i=$((i+1))              user    0m0.992s
i=$((i++))              user    0m0.964s
((i=i+1))               user    0m0.760s
((i+=1))                user    0m0.700s
((i++))                 user    0m0.644s
((++i))                 user    0m0.556s
let "i=i+1"             user    0m1.116s
let "i+=1"              user    0m1.100s
let "i++"               user    0m1.008s
let i=i+1               user    0m0.952s
let i+=1                user    0m1.040s
let i++                 user    0m0.820s
declare -i i; i=i+1     user    0m0.528s
declare -i i; i+=1      user    0m0.492s
i=0; i=$(expr $i + 1)   user    0m5.464s
```



#### Opération mathématiques:



https://www.gnu.org/software/bash/manual/html_node/Arithmetic-Expansion.html

https://www.gnu.org/software/bash/manual/html_node/Shell-Arithmetic.html

##### Multiplication:

```bash
$ echo "$((5 * 3.15))"
15.75

$ echo "5 * 3.15" | bc -l
15.75

$ echo 5 3.15\*p | dc
15.75
```

##### Soustraction:

```bash
$ echo "5 - 3.15" | bc -l
1.85

$ echo "5 3.15 - p" | dc
1.85schell

$ echo "$((5 - 3.15))"
1.8500000000000001
```

##### Addition:

```bash
$ echo "5 + 3.15" | bc -l
8.15

$ echo "$((5 + 3.15))"
8.1500000000000004

$ ((add=5 + 3))
$ echo $add
8

```

##### Division:

```bash
$ echo "5 / 3.15" | bc -l
1.58730158730158730158

$ echo "$((20 / 4))"
5

$ echo "$((5 / 2))"
2
```



##### Variables prédéfinies spéciales:

```bash
$# : nombre de paramètres de ligne de commande transmis au script.
$@ : tous les paramètres de ligne de commande transmis au script.
$ ? : le statut de sortie du dernier processus à exécuter.
$$ : ID de processus (PID) du script actuel.
$USER : le nom d'utilisateur de l'utilisateur exécutant le script.
$HOSTNAME : nom d'hôte de l'ordinateur exécutant le script.
$SECONDS : nombre de secondes pendant lesquelles le script a été exécuté.
$RANDOM : renvoie un nombre aléatoire.
$LINENO : renvoie le numéro de ligne actuel du script.
```

