14-11-2023

This commit is contained in:
2023-11-14 20:35:51 +01:00
parent 5b45dc0863
commit d78f93eed2
93 changed files with 8181 additions and 538 deletions

View File

@@ -2,7 +2,7 @@
#### Concaténer une chaine:
### Concaténer une chaine:
```bash
upd+="$name "
@@ -10,7 +10,7 @@ upd+="$name "
#### Trim une chaine:
### Trim une chaine:
1. sed
@@ -75,9 +75,19 @@ $ echo " Une chaine entourée d'espaces " | xargs -0
Une chaine entourée d'espaces
```
4.
```bash
trim () {
read -rd '' $1 <<<"${!1}"
}
trim foo
```
#### Longueur d'une chaine:
### Longueur d'une chaine:
```bash
$ echo -n "Longueur de la chaine:" | wc -c
@@ -93,7 +103,9 @@ $ echo ${#var}
#### Sous-chaine:
### Sous-chaine:
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameter-Expansion
```bash
$ string=abcABC123ABCabc
@@ -119,6 +131,14 @@ ab
echo "$string" | awk '{print substr($0,0,2)}'
ab
# Supprimer le dernier caractère:
$ echo ${string:0:-1}
abcABC123ABCab
# Remplacer certains caractères par un autre:
$ echo ${string//[ABC]/:}
abc:::123:::abc
# Obtenir les 4 derniers caractères:
$ echo ${stringZ: -4} # Notez l'espace
Cabc
@@ -137,7 +157,7 @@ filename="${filename%.*}"
#### Remplacement de sous-chaine:
### Remplacement de sous-chaine:
```bash
$ string=abcABC123ABCabc
@@ -166,7 +186,7 @@ ABC123ABC
http://tldp.org/LDP/abs/html/string-manipulation.html
#### Majuscule / Capitalize:
### Majuscule / Capitalize:
```bash
string=bonjour
@@ -181,13 +201,51 @@ echo ${string^^}
BONJOUR
echo $string | tr '[:lower:]' '[:upper:]'
echo $string | awk '{print toupper($0)}'
echo $string | tr '[a-z]' '[A-Z]'
BONJOUR
string=HelLo
# 1ere lettre en minuscule (Bash 4)
echo ${string,}
helLo
# Met en minuscule toute la chaine
echo ${string,,}
hello
echo $string | awk '{print tolower($0)}'
echo $string | tr '[:upper:]' '[:lower:]'
```
```bash
phrase="bonjour tout le monde"
# Capitalise tous les mots (1)
B=( $phrase )
caps="${B[@]^}"
echo "$caps"
Bonjour Tout Le Monde
# Capitalise tous les mots (2)
for i in $phrase; do B=`echo "${i:0:1}" | tr a-z A-Z`${i:1}; caps+="$B "; done
echo "$caps"
Bonjour Tout Le Monde
# Capitalise tous les mots (3)
caps=$(echo "${phrase}" | awk '{for(i=1;i<=NF;i++)sub(/./,toupper(substr($i,1,1)),$i)}1')
echo "$caps"
Bonjour Tout Le Monde
```
#### Parcourrir une variable multi-ligne:
### Parcourrir une variable multi-ligne:
```bash
dependencies=$(echo "CairoSVG,setuptools" | xargs pipdeptree -r -p )
@@ -210,12 +268,14 @@ done <<< "$dependencies"
[[ STRING =~ REGEX ]]
[Regular Expression Matching](rematch.md)
Chaine commençant par:
```bash
# String est une url ?
if [[ $string =~ ^http ]]
if [[ $string =~ ^http ]]; then
```
Chaine se terminant par:
@@ -223,7 +283,7 @@ Chaine se terminant par:
```bash
# String est un fichier .mp3 ?
if [[ $string =~ .mp3$ ]]
if [[ $string =~ .mp3$ ]]; then
```
Adresse IP:
@@ -238,3 +298,409 @@ Email:
if [[ "$email" =~ "^[A-Za-z0-9._%+-]+<b>@</b>[A-Za-z0-9.-]+<b>\.</b>[A-Za-z]{2,4}$" ]]
```
Rechercher une sous-chaine
```bash
name=testjohntext
if [[ "$name" == *john* ]]; then
echo "The string \"john\" was found in the variable \$name"
fi
[[ "$name" == *john* ]] && echo "The string \"john\" was found in the variable \$name"
The string "john" was found in the variable $name
```
Regex
```bash
mytest="The quick brown fox"
[[ "$mytest" =~ The..uick.b..w* ]] && echo "We found a match"
We found a match
```
### IFS (internet field separator)
```bash
$ old_IFS=$IFS
$ IFS=-
$ read day month year
25-12-2013
$ echo $day
25
$ echo $month
12
$ echo $year
2013
$ IFS=old_IFS
```
```bash
$ reg=("Bourgogne" "Burgundy" "Bourgogne Franche-Comté" "Côte d'or" "cotedor")
$ echo "$reg"
Bourgogne Burgundy Bourgogne Franche-Comté Côte d'or cotedor
$ t=${reg[@]}
$ echo "$t"
Bourgogne Burgundy Bourgogne Franche-Comté Côte d'or cotedor
# ${A[@]} is essentially the same as ${A[*]}, differing only when they are in double quotes. When double quoted, * uses the first character of IFS as the separator.
$ t=${reg[*]}
$ echo "$t"
Bourgogne Burgundy Bourgogne Franche-Comté Côte d'or cotedor
$ t=${reg[@]}
$ S=${t// /}
$ echo "$S"
BourgogneBurgundyBourgogneFranche-ComtéCôted'orcotedor
```
| **Parameter Expansion** | **Description** |
| --------------------------- | ------------------------------------------------------------ |
| ${variable:-value} | Si la variable est <u>unset</u> ou <u>undefined</u>, développez la **valeur**. |
| ${variable:=value} | Si la variable est <u>unset</u> ou <u>undefined</u>, définissez la **valeur** sur la variable. |
| ${variable:+value} | Si la variable est <u>set</u> ou <u>defined</u>, développez la **valeur**. |
| ${variable:?value} | Si la variable est <u>unset</u> ou <u>undefined</u>, le développement de mot (ou un message à cet effet si mot n'est pas présent) est <u>écrit dans l'erreur standard</u> et le shell, s'il n'est pas interactif, se termine. Sinon, la valeur du paramètre est remplacée. |
| ${#variable} | <u>Longueur</u> de la variable.<br />Pour un tableau, le nombre d'éléments |
| ${variable/#pattern/string} | Si le modèle existe au début de la variable, remplacez l'occurrence par une chaîne. |
| ${variable/%pattern/string} | Si le modèle existe à la fin de la variable, remplacez l'occurrence par une chaîne. |
| | **Rechercher / remplacer** |
| --------------------------- | ------------------------------------------------------------ |
| ${variable/pattern/string} | Remplacez la partie de la variable par une chaîne où le modèle correspond pour la première fois. |
| ${variable//pattern/string} | Remplacez toutes les occurrences de la variable par une chaîne où tous les modèles correspondent. |
| | |
| | |
| | **Sous-chaines** |
| --------------------------- | ------------------------------------------------------------ |
| ${variable:start:length} | La sous-chaîne récupérera de la position de <u>départ</u> à la position de <u>longueur</u> de la variable. |
| ${variable:(-start):length} | idem en partant de la fin |
| ${variable:start} | La sous-chaîne récupérera de la position de <u>départ</u> à la partie restante de la variable. |
| ${variable:(-start)} | idem en partant de la fin |
| | **Suppression de sous-chaines** |
| -------------------- | ------------------------------------------------------------ |
| ${variable#pattern} | Supprimez la correspondance la plus courte depuis le début de la variable où le modèle correspond.<br /><br />Remove the shortest match from the beginning of the variable where the pattern matches. |
| ${variable##pattern} | Supprimez la correspondance la plus longue depuis le début de la variable où le modèle correspond. |
| ${variable%pattern} | Supprimez la correspondance la plus courte à partir de la fin de la variable où le modèle correspond. |
| ${variable%%pattern} | Supprimez la correspondance la plus longue à partir de la fin de la variable où le modèle correspond. |
| | **Changement de case** |
| ------------- | ------------------------------- |
| ${variable^} | Met la 1ere lettre en majuscule |
| ${variable^^} | Met tout le mot en majuscule |
| ${variable,} | Met la 1ere lettre en minuscule |
| ${variable,,} | Met tout le mot en minuscule |
| ${variable~} | Inverse la 1ere lettre |
| ${variable~~} | Inverse tout le mot |
#### **${variable:-value}**:
```bash
# si la variable est unset ou undefined, développez la valeur:
# 1. myvar n'est pas définie
$ echo "${myvar:-bash}"
bash
$ echo $myvar
# 2. myvar est définie
$ myvar=3
$ echo "${myvar:-bash}"
3
$ echo $myvar
3
```
#### **${variable:=value}**
```bash
# Si la variable est unset ou undefined, définissez la valeur sur la variable:
# 1. myvar n'est pas définie
$ echo "${myvar:=bash}"
bash
$ echo $myvar
bash
# 2. myvar est définie
$ myvar=zsh
$ echo "${myvar:=bash}"
zsh
$ echo $myvar
zsh
```
#### **${variable:+value}**
```bash
# Si la variable est set ou defined, développez la valeur:
# 1. myvar n'est pas définie
$ echo "${myvar:+python}"
# 2. myvar est définie
$ myvar=zsh
$ echo "${myvar:+python}"
python
$ echo $myvar
zsh
```
#### **${variable:?value}**
```bash
# 1. myvar n'est pas définie
$ echo "${myvar:?bash}"
bash: myvar: bash
# 2. myvar est définie
$ myvar=zsh
$ echo "${myvar:?bash}"
zsh
$ echo $myvarzsh
zsh
```
#### **${variable:start:length}**
```bash
# La sous-chaîne récupérera de la position de départ à la position de longueur de la variable.
$ myvar="La sous-chaîne récupérera de la position de départ à la position de longueur de la variable."
$ echo "${myvar:15:35}"
récupérera de la position de départ
$ echo "${myvar:(-15):35}" # Séparer l'offset des : avec les parenthèses ()
de la variable.
```
#### **${variable:start}**
```bash
# La sous-chaîne récupérera de la position de départ à la partie restante de la variable.
$ myvar="La sous-chaîne récupérera de la position de départ à la partie restante de la variable."
$ echo "${myvar:15}"
récupérera de la position de départ à la partie restante de la variable.
$ echo "${myvar:(-15)}" # Séparer l'offset des : avec les parenthèses ()
de la variable.
```
#### **${\#variable}** **${\#array}**
```bash
# Longueur de la variable.
$ myvar="Longueur de la variable."
$ echo "${#myvar}"
24
$ array=("name" "word")
$ echo "${#array}"
```
#### **${variable/pattern/string}**
```bash
# Remplacez la partie de la variable par une chaîne où le modèle correspond pour la première fois.
$ myvar="Remplacez la partie de la variable par une chaîne où le modèle correspond pour la première fois."
$ echo "${myvar/la/the}"
Rempthecez la partie de la variable par une chaîne où le modèle correspond pour la première fois.
```
#### **${variable//pattern/string}**
```bash
# Remplacez toutes les occurrences de la variable par une chaîne où tous les modèles correspondent.
$ myvar="Remplacez toutes les occurrences de la variable par une chaîne où tous les modèles correspondent."
$ echo "${myvar//les/the}"
Remplacez toutes the occurrences de la variable par une chaîne où tous the modèthe correspondent.
```
#### **${variable/#pattern/string}**
```bash
# Si le modèle existe au début de la variable, remplacez l'occurrence par une chaîne.
$ myvar="Si le modèle existe au début de la variable, remplacez l'occurrence par une chaîne"
$ echo "${myvar/#les/If}"
Si le modèle existe au début de la variable, remplacez l'occurrence par une chaîne
$ echo "${myvar/#Si/If}"
If le modèle existe au début de la variable, remplacez l'occurrence par une chaîne
```
#### **${variable/%pattern/string}**
```bash
# Si le modèle existe à la fin de la variable, remplacez l'occurrence par une chaîne.
$ myvar="Si le modèle existe à la fin de la variable, remplacez l'occurrence par une chaîne."
$ echo "${myvar/%chaine./laisse.}" # i
Si le modèle existe à la fin de la variable, remplacez l'occurrence par une chaîne.
$ echo "${myvar/%chaîne/laisse}" # î
Si le modèle existe à la fin de la variable, remplacez l'occurrence par une laisse
```
#### **${variable#pattern}**
```bash
# Supprimez la correspondance la plus courte depuis le début de la variable où le modèle correspond.
# Remove the shortest match from the beginning of the variable where the pattern matches.
$ myvar="Supprimez la correspondance la plus courte depuis le début de la variable où le modèle correspond."
$ echo "${myvar#*la}" # du début au 1er la
correspondance la plus courte depuis le début de la variable où le modèle correspond.
```
#### **${variable##pattern}**
```bash
# Supprimez la correspondance la plus longue depuis le début de la variable où le modèle correspond.
$ myvar="Supprimez la correspondance la plus longue depuis le début de la variable où le modèle correspond."
$ echo "${myvar##*la}" # du début au dernier la
variable où le modèle correspond.
```
#### **${variable%pattern}**
```bash
# Supprimez la correspondance la plus courte à partir de la fin de la variable où le modèle correspond.
$ myvar="Supprimez la correspondance la plus courte à partir de la fin de la variable où le modèle correspond."
$ echo "${myvar%la*}"
Supprimez la correspondance la plus courte à partir de la fin de
```
#### **${variable%%pattern}**
```bash
# Supprimez la correspondance la plus longue à partir de la fin de la variable où le modèle correspond.
$ myvar="Supprimez la correspondance la plus longue à partir de la fin de la variable où le modèle correspond."
$ echo "${myvar%%la*}"
Supprimez
```
#### **Exemples avec les chemins / fichiers:**
```bash
$ PATHNAME=/Users/bruno/Pictures/Export/2022/Juillet/2022-07-01_Chevrette_3462.jpg
# Obtenir le répertoire:
$ echo ${PATHNAME%/*}
/Users/bruno/Pictures/Export/2022/Juillet
# Obtenir le nom de fichier:
$ echo ${PATHNAME##*/}
2022-07-01_Chevrette_3462.jpg
$ FILENAME=2022-07-01_Chevrette_3462.jpg
# Obtenir le nom de fichier sans extension:
$ echo ${FILENAME%.*}
2022-07-01_Chevrette_3462
# Obtenir l'extension:
$ echo ${FILENAME##*.}
jpg
```
https://wiki.bash-hackers.org/syntax/pe#substring_removal