以下の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