比较 bash 中声音文件的长度

Compare length of sound file in bash

我想要一个 shell 脚本,用于检查声音文件的长度并检查长度是否短于指定长度。但是我在 if 语句中不断收到错误消息 "command not found"。

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

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

我猜 $soundlength 是一个字符串,它无法将字符串与 int 进行比较,但我找不到解决这个问题的方法。

提前感谢所有的回答。

问题是 soxi returns 0 或浮点数 - 例如 27.741995,因此您需要 bcawk 来检查输出是否大于N,这是因为 bash 不支持浮点数。

这里有一个 bc 的例子:

#!/bin/bash

soundlength=$(soxi -D )

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

这里有一个 AWK 的例子:

#!/bin/bash

soundlength=$(soxi -D )

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

如果您不想使用 bcawk,您可以尝试 zsh shell,它支持浮动。