모든 인수가 파일인지 확인하는 방법은 무엇입니까?

모든 인수가 파일인지 확인하는 방법은 무엇입니까?

쉘 스크립트에 전달된 모든 인수가 파일인지 어떻게 확인합니까? $@매개변수와 -f구문을 사용하려고 했습니다 if.

답변1

여부를 테스트하려면모두인수는 파일이므로 인수 중 하나가 파일인지 테스트하는 것이 더 쉽습니다.~ 아니다파일:

for argument do
    if [ ! -f "$argument" ]; then
        printf 'Not a file: %s\n' "$argument" >&2
        exit 1
    fi
done

echo 'All arguments are files'

이는 모든 위치 매개변수를 반복하고 각각을 차례로 테스트합니다. 파일이 아닌 것이 발견되면 오류가 인쇄되고 코드가 종료됩니다.

모든 인수를 조사하려면 다음을 수행하십시오.

for argument do
    if [ -f "$argument" ]; then
        printf 'Is a file: %s\n' "$argument"
    else
        printf 'Is not a file: %s\n' "$argument"
    fi
done

이는 모든 위치 매개변수를 반복하고 각각을 차례로 테스트하여 테스트 결과를 인쇄합니다.

"파일입니다"라는 점에 유의하세요.실제로"일반 파일이거나 일반 파일에 대한 심볼릭 링크"를 의미합니다. 일반 파일에 대한 심볼릭 링크가 아닌지 확인하려면 다음을 사용하십시오.

if [ ! -f "$argument" ] || [ -L "$argument" ]; then

첫 번째 루프의 테스트로, 또는

if [ -f "$argument" ] && [ ! -L "$argument" ]; then

두 번째 루프의 테스트로.

루프의 첫 번째 줄은 다음과 같이 작성할 수도 있습니다.

for argument in "$@"; do

... 하지만 사람들은 큰따옴표를 잊어버리는 경향이 있으며 $@어쨌든 상단의 루프는 입력하기에 더 짧습니다.

관련 정보