2010-09-28 3 views
0

J'essaie de comparer la variable $ duration à un int, pour voir combien de temps il dure. J'ai besoin de deturmine combien de 0 ajouter au nom de fichier pour maintenir des noms propres, par exemple.Comparaison de la variable à Ints avec if/fi dans le script BASH

cap_000001.png

cap_002938.png

Ma déclaration actuelle est:

if [ $duration < 1000 ]; then 
    sudo ./v2u cap_000$duration.png 
    echo 1000 seconds 
fi 
if [ $duration < 100 ]; then 
    sudo ./v2u cap_0000$duration.png 
    echo 100 seconds 
fi 
if [ $duration < 10 ]; then 
    sudo ./v2u cap_00000$duration.png 
    echo 10 seconds 
fi 

Merci de votre aide!

Si quelqu'un a une solution plus simple pour nommer les fichiers avec un nombre constant de chiffres, ce serait génial!

Répondre

2

Essayez man printf. C'est loin, bien mieux pour cette tâche qu'un tas de if blocs.

sudo ./v2u $(printf "cap_%06d.png" "$duration") 
+0

Convenir que c'est une solution beaucoup plus supérieure. +1 J'ai aussi écrit une réponse directe à la question du PO, ainsi qu'une version complète de votre approche. J'espère que ça ne vous dérangera pas. :-) –

2

Pour répondre directement à votre question sur les chiffres comparant:

if [ "$duration" -lt 1000 ]; then 

Vous avez l'idée. :-)

réponse Amber est, bien sûr, beaucoup mieux d'un point de vue forestier au lieu-des-arbres:

printf "cap_%06d.png" "$duration" 
0

Si vous préférez utiliser des opérateurs de comparaison tels que > au lieu de -lt, bash comparaisons numériques comme ceci:

if ((duration < 1000)); then 

Cependant, printf est le chemin à parcourir.

Cela donnera un effet similaire à l'approche printf, également sans avoir à faire des déclarations if:

num=000000$duration 
sudo ./v2u "cap_${num: -6}.png" 
Questions connexes