スクリプトに追加のコマンドライン使用シナリオを追加するにはどうすればよいですか?

スクリプトに追加のコマンドライン使用シナリオを追加するにはどうすればよいですか?

以下の2つの入力使用シナリオでこのスクリプトが機能するようにするにはどうすればよいですか?

#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

パラメータをパスとして使用できます。簡単なトリックを使用できます。/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

関連情報