【问题标题】:Compare length of sound file in bash比较bash中声音文件的长度
【发布时间】:2017-09-23 19:23:46
【问题描述】:

我想要一个 shell 脚本,它检查声音文件的长度并检查长度是否比指定的长度短。但我在 if 语句中不断收到“找不到命令”的错误消息。

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

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

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

提前感谢所有答案。

【问题讨论】:

  • [ 后面可能需要一个空格。否则,bash 会认为 [$soundlength 是命令而不是你想要的
  • shellcheck.net 将为您进行这种性质的基本调试。祝你好运。
  • 答案不属于问题。如果您已经解决了自己的问题,请在下面的“答案”框中发布答案。

标签: shell audio terminal wav sox


【解决方案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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 2020-06-26
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多