命令行——bash脚本中的算术问题



我正在尝试使用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))也行不通。

我试图用let "MIN-=2"替换((MIN=MIN-2)),我得到一个错误:let: not found

我已经检查了两遍,但仍然不知道为什么。我的头发都白了

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

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

尝试用#!/bin/bash代替第一行

最新更新