Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

transformer une durée HMS en s

3 réponses
Avatar
jean-jacques
Bonjour.
Je me suis posé ce pb trivial et puis je me suis aperçu que je ne trouvais
pas cela si simple . J'ai utilisé une variable array.
Voila ce que j'ai fait(!)
#!/bin/bash
#transforme en s une duree donnee en H M S ex 2H35M45S
#utilise un tableau $table
if [ 0 -eq $# ]
then echo " entrez une duree ex 2H35M45S "
else
declare -a table
for j in 1 2 3
do
x=$(echo $1|sed 's/[A-Z]/:/g'|cut -d : -f$j)
table[j]=$x
done
temps=$((${table[1]}*3600+${table[2]}*60+${table[3]}))
echo $temps
fi

Je voulais indexer une variable par les index de boucle:
for j in 1 2 3
do
x$j=$(echo $1|sed 's/[A-Z]/:/g'|cut -d : -f$j )etc.
Apparemment l'affectation ne fonctionne pas.
--
cordialement jean-jacques.
Ce message a été écrit sur un système libre mandriva
"Tant que l'homme sera mortel, il ne pourra pas être totalement
décontracté ."
Woody Allen.

3 réponses

Avatar
Luc.Habert.00__arjf
jean-jacques :

Bonjour.
Je me suis posé ce pb trivial et puis je me suis aperçu que je ne trouvais
pas cela si simple . J'ai utilisé une variable array.
Voila ce que j'ai fait(!)
#!/bin/bash
#transforme en s une duree donnee en H M S ex 2H35M45S
#utilise un tableau $table



OLDIFS=$IFS
IFS=HMS
set -f
set -- $1
set +f
IFS=$OLDIFS
SECONDES=`expr "$1" '*' 3600 + "$2" '*' 60 + "$3"`

Je voulais indexer une variable par les index de boucle:
for j in 1 2 3
do
x$j=$(echo $1|sed 's/[A-Z]/:/g'|cut -d : -f$j )etc.
Apparemment l'affectation ne fonctionne pas.


PLOUM=$(echo $1|sed 's/[A-Z]/:/g'|cut -d : -f$j )
eval "x$j="'$PLOUM'

mais c'est une horreur.

Avatar
Stephane Chazelas
2007-06-24, 19:47(+02), jean-jacques:
Bonjour.
Je me suis posé ce pb trivial et puis je me suis aperçu que je ne trouvais
pas cela si simple . J'ai utilisé une variable array.
Voila ce que j'ai fait(!)
#!/bin/bash
#transforme en s une duree donnee en H M S ex 2H35M45S
#utilise un tableau $table


Quel est l'interet de programmer en bash (ou ksh, zsh...)?

printf 'Entrez une valeur: '
awk -F'[^0-9]+' '{print "Resultat:", ($1*60+$2)*60+$3; exit}'

Pas besoin de "#!" et utiliser une syntaxe standard.

Et ne pas oublier qu'un shell est avant tout un interpreteur de
commande. Le boulot doit etre fait par les commandes. Si on fait
faire le boulot au shell, alors autant utiliser un vrai language
de programmation. En particulier l'utilisation d'array est un
signe qu'on part dans la mauvaise direction.

--
Stéphane

Avatar
jean-jacques
Luc Habert wrote:

jean-jacques :


mais c'est une horreur.
Merci à vous deux.

Je vais étudier vos réponses!
Il y a loin de la coupe aux lèvres. :-((

--
cordialement jean-jacques.
Ce message a été écrit sur un système libre mandriva
"Tant que l'homme sera mortel, il ne pourra pas être totalement
décontracté ."
Woody Allen.