2017-09-23 13 views
0

Je veux avoir un script shell, qui vérifie la longueur d'un fichier son et vérifie si la longueur est plus courte, qu'une longueur spécifiée. Mais je reçois toujours un message d'erreur "commande non trouvée" à l'if-statement.Comparer la longueur du fichier son dans bash

#!/bin/bash 
soundlength=$(soxi -D $1) 

enter code here 
if [$soundlength < $2] 
then 
    # do something 
fi 

Je devine que la soundlength $ est une chaîne et il y a défaut de comparer chaîne int, mais je ne peux pas trouver une solution à cela.

Merci d'avance pour toutes les réponses.

+2

Vous avez probablement besoin d'un espace après le '['. Sinon, bash pensera que [$ soundlength' est la commande au lieu de ce que vous voulez –

+1

http://shellcheck.net fera le débogage de base de cette nature pour vous. Bonne chance. – shellter

+1

Les réponses n'appartiennent pas à la question. Si vous avez résolu votre propre problème, veuillez poster une réponse dans la case «réponse» ci-dessous. –

Répondre

1

Le problème est que soxi renvoie 0 ou un flotteur - exemple 27,741995, donc vous aurez besoin bc ou awk pour vérifier si la sortie est plus grand que N, parce que bash ne supportent pas les flotteurs.

Voici un exemple avec bc:

#!/bin/bash 

soundlength=$(soxi -D $1) 

if [ 1 -eq "$(echo "${soundlength} > ${2}" | bc)" ]; then 
    echo "${soundlength} is > than ${2}" 
fi 

Et voici un exemple avec AWK:

#!/bin/bash 

soundlength=$(soxi -D $1) 

if awk 'BEGIN{exit ARGV[1]>ARGV[2]}' "$z" "$y"; then 
    echo "${soundlength} is > than ${2}" 
fi 

Si vous ne souhaitez pas utiliser soit bc de awk vous pourriez donner un essai à zsh shell, il prend en charge les flotteurs.