Résolu le 25-04-20 Modification simple de chaîne sous Bash

Répondre
Avatar du membre
Christian_B
Messages : 532
Enregistré le : lun. 7 nov. 2016 10:44
Localisation : Paris

Modification simple de chaîne sous Bash

Message par Christian_B »

Bonjour,
Quoique peu familier du shell, j'ai fait un petit script de sauvegarde de mes fichiers de config qui marche presque.
Mais je bute sur ce qui me paraît être une absence (étonnante) de fonctions de chaînes dans Bash.
Je rentre veux rentrer interactivement le chemin du volume de sauvegarde.
Pour créer ensuite sans problèmes le chemin complet, je teste si le chemin rentré se termine par '/' :

Code : Tout sélectionner

if [[ ${$Rep: -1} == "/"]] then ;  # Retirer le '/' Rep=".........." 
Le problème est clairement posé : je ne sais même pas retirer le '/' final s'il y est :(

Est-ce une commande interne, une expression de chaîne permettant des opérations simples (je n'en ai pas trouvé), une commande externe ? Mystère.
J'espère quand même qu'il ne faudra pas que je me mette aux expressions régulières pour faire ça.
Quelqu'un connaissant mieux le shell que moi a-t-il la solution ?
Merci.
Linux Mint 22.1 Mate 1.26.2. Carte Gigabyte H81N.
Intel Core i7-4770 : 4x2 cœurs + Xeon E3-1200 (= circuit 4600).
Mémoire 8 Go Dual channel, SSD 120Go, HD 2To.
Les armes nucléaires sont interdites depuis le 22 janvier 2021. Y a plus qu'à ...
Avatar du membre
Christian_B
Messages : 532
Enregistré le : lun. 7 nov. 2016 10:44
Localisation : Paris

Re: Modification simple de chaîne sous Bash

Message par Christian_B »

cyrille a écrit :Tu veux savoir si tu es bien dans un dossier c'est cela ?
Non, comme indiqué, je veux retirer le '/' final de $Rep s'il y est.
$Rep à ce moment là est le chemin du volume à utiliser.

Le but est de le concaténer avec le chemin du répertoire de sauvegarde dans le volume (calculé ensuite selon la date) pour obtenir un chemin complet. Je veux éviter d'avoir deux cas de figure selon que le chemin du volume est entré avec un / final ou pas.
Sinon je devrais écrire deux expressions presque identiques pour le chemin complet selon le cas.
Ce serait de la mauvaise programmation et m'obligerait par la suite éventuellement à faire deux fois toutes les modifications sur la définition du chemin complet.

Ta suggestion :
cyrille a écrit :

Code : Tout sélectionner

echo "Tout sauf le dernier caractère : ${chaine%?}"
m'a donné la solution, même si je n'ai pas tout compris.
Comme dans mon cas il s'agissait de modifier $Rep, j'ai testé par :

Code : Tout sélectionner

#! /bin/bash
Rep="~/hd1/" ;
Rep="${Rep%?}"
 echo $Rep
Et j'ai bien '~/hd1/' en retour (sans les apostrophes). C'est exactement ce que je voulais.
Merci cyrille.
Va falloir que j'étudie de près ce genre d'expression, sauf si je me mets rapidement à Tcl où la commande string est moins compacte mais aussi moins cabalistique.
En attendant, sauvé, je vais échapper à python (qui me donne des boutons) et à GTK. 8-)
Linux Mint 22.1 Mate 1.26.2. Carte Gigabyte H81N.
Intel Core i7-4770 : 4x2 cœurs + Xeon E3-1200 (= circuit 4600).
Mémoire 8 Go Dual channel, SSD 120Go, HD 2To.
Les armes nucléaires sont interdites depuis le 22 janvier 2021. Y a plus qu'à ...
Répondre