내 스크립트에 추가 명령줄 사용 시나리오를 추가하려면 어떻게 해야 합니까?

내 스크립트에 추가 명령줄 사용 시나리오를 추가하려면 어떻게 해야 합니까?

아래의 두 가지 입력 사용 시나리오에서 이 스크립트가 작동하도록 하려면 어떻게 해야 합니까?

#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

관련 정보