# Bash # [Bash] Kit de base ## En-tête ```bash #!/bin/bash ``` ## Variables Il existe 2 types de variables en bash : - Les **variables traditionnelles** définies par l'utilisateur. Leur identifiant doit être en minuscule. - Les **variables d'environnements** qui sont définies par le système. Leur identifiant doit être en majuscule. #### Définition et affectation de variables Valeur entière : ```bash myVar=3 ``` Chaîne de caractères : ```bash myVar="Hello world !" ``` Liste : ```bash myArray=("cat" "dog" "mouse" "frog") ``` Sortie d'une commande : ```bash myVar=$( echo "test" ) ``` #### Utilisation des variables Pour accéder à la valeur stockée dans une variable on utilise le caractère **$** : ```bash echo $myVar ``` ## Conditions #### If ```bash if [ ] then fi ``` #### If / Else ```bash if [ ] then else fi ``` #### If / Elif / Else ```bash if [ ] then elif [ ] then else fi ``` #### Case ```bash case in ) ;; ) ;; esac ``` #### Tests
OperatorDescription
! EXPRESSIONThe EXPRESSION is false.
-n STRINGThe length of STRING is greater than zero.
-z STRINGThe lengh of STRING is zero (ie it is empty).
STRING1 = STRING2STRING1 is equal to STRING2
STRING1 != STRING2STRING1 is not equal to STRING2
INTEGER1 -eq INTEGER2INTEGER1 is numerically equal to INTEGER2
INTEGER1 -gt INTEGER2INTEGER1 is numerically greater than INTEGER2
INTEGER1 -lt INTEGER2INTEGER1 is numerically less than INTEGER2
-d FILEFILE exists and is a directory.
-e FILEFILE exists.
-r FILEFILE exists and the read permission is granted.
-s FILEFILE exists and it's size is greater than zero (ie. it is not empty).
-w FILEFILE exists and the write permission is granted.
-x FILEFILE exists and the execute permission is granted.
#### Opérations booléennes On peut combiner les tests grâce aux opérateurs suivants :
ET OU
&& ||
Exemple : ```bash if [ -r $1 ] && [ -s $1 ] then echo This file is useful. fi ``` ## Boucles #### While ```bash while [ ] do done ``` #### For Pour parcourir une liste, on utilise une boucle for où la variable **var** sera l'élément sélectionné de la liste à traiter : ```bash for var in <$list> do done ``` Pour une "range" on fera le type de boucle for suivant : ```bash for value in {1..5} do echo $value done ``` ## Cacher la sortie d'une commande ```bash > /dev/null 2>&1 ``` ## Obtenir la date Format **Heure-Minute-Jour-Mois-Année** : ```bash currentDate=$(date +'%H:%M-%d-%m-%Y') ``` Format **Jour-Mois-Année-Heure-Minute** : ```bash currentDate=$(date +'%d-%m-%Y-%H:%M') ``` ## Afficher un espace sans faire d'espace Cela peut s'avérer pratique notamment dans un contexte où les espaces ne sont pas autorisés mais que vous devez exécuter une commande avec des arguments (et donc des espaces). Pour cela, on utilise la variable d'environnement **{IFS}** : ```bash echo${IFS} ``` # [Bash] Cheat.sh ## Introduction Ce site répertorie tout un tas de commandes utiles pour vos scripts et utilisation quotidienne sur des tâches plus ou moins complexes en bash. ## Site - [Lien du site officiel](https://cheat.sh) # [Bash] Explainshell ## Introduction Cet outil en ligne vous permet de décomposer une commande afin de comprendre le fonctionnement et l'intérêt des paramètres. ## Site - [ExplainShell](https://explainshell.com/) # [Bash] GPG et secrets ## Introduction Lorsque vous travaillez sur des scripts bash, vous pouvez parfois avoir besoin d'utiliser des identifiants pour vous authentifier sur un serveur ou un service. La manière la plus simple pour fournir les identifiants est généralement de saisir les identifiants en clair dans un fichier texte ou directement dans le script. Cependant, il s'agit d'une mauvaise pratique car un pirate qui a accès au script ou au fichier pourra accéder au mot de passe en clair. [![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2024-02/scaled-1680-/Y9uimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2024-02/Y9uimage.png) ## Manuel #### Création du fichier chiffré Après avoir créé un fichier contenant le mot de passe en clair, lancez la commande suivante pour obtenir une version chiffrée et protégée : ```bash gpg -c ```

Une fois la version chiffrée obtenue, supprimez la version originale par sécurité.

#### Obtention du mot de passe en clair Une fois authentifié avec l'utilisateur à l'origine du chiffrement du fichier : ``` gpg -dq .gpg ``` #### SSHpass Cet utilitaire (à installer via votre gestionnaire de paquet), permet de saisir un mot de passe sans interaction de la part de l'utilisateur pour vos connexions **SSH** ou **RSync.** Il prend en option ou par le pipe, le mot de passe et se charge de le saisir pour vous automatiquement. Voici un exemple tiré de l'article de [LinuxTricks](https://www.linuxtricks.fr/wiki/ssh-sshpass-la-connexion-ssh-par-mot-de-passe-non-interactive) : ``` sshpass -p "monmotdepassecostaud" ssh adrien@192.168.21.100 ``` Ou alors : ``` gpg -dq secret.gpg | sshpass ssh user@10.0.0.1 ``` # [Bash] Transférer un fichier ## Introduction Si vous êtes dans un environnement restreint et que vous disposez seulement d'un shell, vous pouvez vous poser la question de comment transférer un fichier via le réseau. Heureusement, bash propose plusieurs solution pour palier ce problème. ![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2024-05/scaled-1680-/9N8image.png) ## Netcat Cet outil est pratique et présent sur de nombreuses distributions Linux. Tout d'abord, mettez vous en écoute depuis la machine source (qui envoie le fichier) : ```bash nc -lp < ``` Puis réceptionnez le fichier depuis la machine cible : ```bash nc > ```