2017-09-23 78 views
0

我想要一個shell腳本,它檢查聲音文件的長度並檢查長度是否比指定長度短。但是我一直在if語句中收到錯誤信息「command not found」。在bash中比較聲音文件的長度

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

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

我猜$ soundlength是一個字符串,它的失敗比較字符串爲int,但我不能找到一個解決這個。

在此先感謝所有答案。

+2

''''後面可能需要一個空格。否則,bash會認爲'[$ soundlength'是命令而不是你想要的東西 –

+1

http://shellcheck.net會爲你做這種性質的基本調試。祝你好運。 – shellter

+1

答案不屬於問題。如果你已經解決了你自己的問題,請在下面的「答案」框中回答問題。 –

回答

1

的問題是,soxi返回0或浮動 - 例如27.741995,因此,您需要bcawk檢查,如果輸出大於N大,這是因爲bash不支持浮動。

這裏是bc一個例子:

#!/bin/bash 

soundlength=$(soxi -D $1) 

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

這裏是AWK一個例子:

#!/bin/bash 

soundlength=$(soxi -D $1) 

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

如果你不想使用awkbc你可以給一個嘗試到zsh外殼,它支持浮動。