【问题标题】:Problem with the arithmetics in the bash scriptingbash 脚本中的算术问题
【发布时间】:2011-10-01 16:44:20
【问题描述】:

我正在尝试使用 FFMpeg 将视频剪辑成 2 分钟的剪辑。我正在使用 Ubuntu 10.10。

这是我的代码:

#!/bin/sh
COUNTER=0
BEG=0
MIN=`ffmpeg -i ${1} 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,// | cut -d ":" -f 2`
echo $MIN
((MIN=MIN-2))
before_last_dot=${1%.*};
while [ $COUNTER -lt $MIN ]; do
    ((BEG=COUNTER*60))
    echo "MIN:${MIN}"
    echo "ffmpeg -sameq -i ${1} -ss ${BEG} -t 120 ${before_last_dot}.${COUNTER}.wmv"
    ((COUNTER=COUNTER+2))
done

echo "ffmpeg -sameq -i ${1} -ss ${BEG} -t 120 ${before_last_dot}.${COUNTER}.wmv" 应该是 ffmpeg -sameq -i ${1} -ss ${BEG} -t 120 ${before_last_dot}.${COUNTER}.wmv。我打印它以检查它。 ${1} 是视频名称。

但问题是,((COUNTER=COUNTER+2))((COUNTER+=2)) 永远不起作用! COUNTER 始终为 0,BEG 也始终为 0。 ((MIN=MIN-2)) 也不行。

我尝试将 ((MIN=MIN-2)) 替换为 let "MIN-=2" 我收到错误:let: not found

我已经仔细检查过,但仍然不知道为什么。我的头发都变白了。

【问题讨论】:

  • 您是否尝试过使用调试标志 -x 运行脚本? #!/bin/sh -x 会回显每个命令的结果
  • 也许您甚至没有运行 bash?尝试将第一行更改为#!/bin/bash
  • @Martin:你的眼睛很敏锐! #!/bin/bash 工作!问题解决了。谢谢!
  • 我还是不知道/bin/sh/bin/bash的区别。
  • @DocWiki:有很多 shell,bash,Bourne Again Shell,只是其中之一。 /bin/sh 是默认值,通常是安装中最基本的,shell 脚本是简单的默认值,因为它实际上总是存在 - 你不能假设它是给定的 shell。

标签: bash command-line ffmpeg ubuntu-10.10


【解决方案1】:

您使用的((MIN=MIN-2)) 语法是bash 特有的功能。

我没有 Ubuntu 10.10 可供测试,但我猜你的 /bin/sh 不是 bash,而是一个更小更简单的外壳,只有 POSIX 所需的基本功能。 (在这种情况下,((MIN=MIN-2)) 可能会启动一个子 shell,它会启动一个子 shell,它只会将变量 MIN 设置为字符串 MIN-2,然后退出。)

在第一行尝试#!/bin/bash

【讨论】:

  • 是的。我cd /bin 看到sh -> dash
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多