4 votes

Comment puis-je obtenir la sortie d'une commande dans une variable bash?

Je ne peux pas me rappeler comment capturer le résultat de l'exécution dans une variable dans un script bash.

En gros, j'ai un dossier plein de fichiers de sauvegarde du format suivant: backup--mon.hostname.com--1309565.tar.gz

Je veux parcourir une liste de tous les fichiers et extraire la partie numérique du nom de fichier et faire quelque chose avec, donc je fais ceci jusqu'à présent:

HOSTNAME=`hostname`
DIR="/sauvegardes/"
SUFFIX=".tar.gz"
PREFIX="backup--$HOSTNAME--"
TESTNUMBER=9999999999

#se déplacer dans le dossier de sauvegarde
cd $DIR

#obtenir une liste de tous les fichiers de sauvegarde là-dedans
FILES=$PREFIX*$SUFFIX

#Parcourir la liste
for F in $FILES
do
    #extraire le nombre du nom de fichier
    NUMBER=$F | sed s/$PREFIX//g | sed s/$SUFFIX//g

    #comparer le nombre avec un autre nombre
    if [ $NUMBER -lg $TESTNUMBER ]
        #faire quelque chose
    fi
done

Je sais que la partie "$F | sed s/$PREFIX//g | sed s/$SUFFIX//g" extrait correctement le nombre (bien que je sache qu'il pourrait y avoir une meilleure façon de le faire), mais je ne peux tout simplement pas me rappeler comment obtenir ce résultat dans NUMBER pour pouvoir le réutiliser dans l'instruction if ci-dessous.

5voto

Paŭlo Ebermann Points 35526

Utilisez la syntaxe $(...) (ou ``).

NUMBER=$( echo $F | sed s/$PREFIX//g | sed s/$SUFFIX//g )

ou

NUMBER=` echo $F | sed s/$PREFIX//g | sed s/$SUFFIX//g `

(Je préfère le premier, car il est plus facile à voir lorsque plusieurs s'imbriquent.)

0voto

Michael Lowman Points 1500

Backticks if you want to be portable to older shells (sh):

NUMBER=`$F | sed s/$PREFIX//g | sed s/$SUFFIX//g`.

Otherwise, use NUMBER=$($F | sed s/$PREFIX//g | sed s/$SUFFIX//g). It's better and supports nesting more readily.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X