스크립트 실행 시 매개변수를 처리하는 방법

스크립트 실행 시 매개변수를 처리하는 방법

스크립트 실행 시 매개변수를 처리하는 방법

내 코드는 다음과 같습니다

#!/bin/bash

DIR="$1"

if [ DIR eq $1 ]
then
    echo -n "total directories:" ; find $DIR -type d | wc -l
    echo -n "total files:" ; find $DIR -type f | wc -l
else
    echo " pass parameters"
fi

스크립트 이름( )을 사용하여 실행하면 ./countfiledirs다음과 같이 읽습니다.

./countfiledirs: line 4: [: DIR: unary operator expected
 pass parameters

매개변수를 전달하지 않고 실행 하면 ./countfiledirs다음과 같이 표시됩니다.

pls pass arguments.

./countfiledirs를 실행하고 인수를 ./countfiledirs /usr/share로 전달하면 다음과 같은 출력이 표시됩니다.

total directories:145
total files:254

답변1

오류는 다음과 같습니다.

if [ DIR eq $1 ]

변수를 사용하지 않고 간단한 string 입니다 DIR. 당신이 원하는 것은 :

if [ "$DIR" = "$1" ]

그러나 이를 설정하고 있으므로 DIR="$1"정의에 따라 이 테스트는 항상 true입니다. 또한 $1비어 있으면 현재 디렉터리에서도 $DIR명령이 find실행됩니다. 많은 버전의 에서 find다음 명령은 동일합니다.

find . -name foo
find -name foo

대상 디렉터리가 없으면 현재 디렉터리를 find검색합니다 .. 따라서 스크립트의 작업 버전은 다음과 같습니다.

#!/bin/bash

## Avoid using UPPER CASE variable names in bash.
dir="$1"

## Check if $dir exists
if [ -e "$dir" ]
then
    printf "total directories: %s\n" $(find "$dir" -type d | wc -l)
    printf "total files: %s\n" $(find "$dir" -type f | wc -l)
else
    echo " pass parameters"
fi

Bash 스크립트에 전달된 인수 수는 다음 $#과 같이 저장됩니다.

if [ $# -lt 1 ]
then
    echo "pass parameters"
    exit
fi

관련 정보