如何向脚本添加额外的命令行使用场景?

如何向脚本添加额外的命令行使用场景?

如何使该脚本适用于下面的两种输入使用场景?

#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

相关内容