“Un argument numérique nécessaire” lorsque vous exécutez le script avec les opérations arithmétiques

Je suis en train d'écrire une fonction qui est censé convertir un horodatage de la forme h:min:sec,ms (j'.e 15:41:47,757) à quelques millisecondes. La fonction est la suivante:

#!/bin/sh
mili () {

    hr=$(echo "$1" | cut -c1-2)
    echo "hr is: " $hr
    min=$(echo "$1" | cut -c4-5)
    echo "min is: " $min
    sec=$(echo "$1" | cut -c7-8)
    echo "sec is: " $sec
    ms=$(echo "$1" | cut -c10-12)
    echo "ms is: " $ms
    total=$(($hr \* 3600 + $min \* 60 + $sec) \* 1000 + $ms)

    return "$total"
    #echo "Result is: "$total" "
}

mili $1

Cependant, quand je le lance:

./mili.sh "15:41:47,757"

J'obtiens le message de sortie:

./mili.sh: command substitution: line 15: syntax error near unexpected token 
`\*'
./mili.sh: command substitution: line 15: `($hr \* 3600 + $min \* 60 + $sec) 
\* 1000 + $ms'
./mili.sh: line 17: return: : numeric argument required

J'ai essayé les variations de expr avec et sans guillemets, les guillemets doubles, et backticks mais ne peut jamais semblent au calcul de l'arithmétique. Je peux confirmer une commande simple comme cela fonctionne: expr 2 * 3 mais quand j'essaie d'utiliser quelque chose de similaire dans mon script il échoue.

Comment puis-je obtenir simplement calculer mon expression?

OriginalL'auteur Tikiyetti | 2017-08-18