如何使该脚本适用于下面的两种输入使用场景?
#1 ./script.sh
#2 ./script.sh input.file
的内容script.sh
for i in *.mp4; do ffmpeg -i "$i" "${i%.*}.mp4
方案#1
是目前唯一有效的方案,因为上面的文件内容特别允许在所有文件都将作为目标的script.sh
目录中运行。.mp4
是否也可以针对单个文件而不是整个目录,但仍然保持其他使用场景#1
始终可用。
更新:我不明白这与他评论的问题有什么关系。
答案1
只需使用参数作为路径即可。您可以使用一个简单的技巧:与since/path/to/dir/./
相同,表示“当前目录”。因此,对于这个简单的情况,您可以这样做:/path/to/dir/
./
#!/bin/bash
for i in "$1"./*.mp4; do
ffmpeg -i "$i" "${i%.*}.mp4";
done
然后像这样运行脚本:
cd /path/to/mp4; /path/to/script.sh
或者像这样(最后的斜杠是必不可少的):
/path/to/script.sh /path/to/mp4/
这样做的一般方法是这样的:
#!/bin/bash
## Assign the 1st argument to the variable "target"
target=$1
## If $target has no value (if $1 was empty), set it to "."
target=${target:="."}
for i in "$target"/*.mp4; do
ffmpeg -i "$i" "${i%.*}.mp4";
done
该变量实际上并不需要,您可以这样做:
#!/bin/sh
for i in ${1-.}/*.mp4; do
echo ffmpeg -i "$i" "${i%.*}.mp4";
done
或者:
#!/bin/sh
if [ -z "$1" ]; then
target="."
else
target="$1"
fi
for i in "$target"/*.mp4; do
ffmpeg -i "$i" "${i%.*}.mp4";
done