올바른 개수의 인수 확인


147

올바른 개수의 인수 (한 개의 인수)를 확인하는 방법 누군가가 올바른 수의 인수를 전달하지 않고 스크립트를 호출하려고 시도하고 명령 행 인수가 실제로 존재하며 디렉토리인지 확인합니다.


5
@Daniel shell그 의미/bin/sh
Ruel

답변:


215
#!/bin/sh
if [ "$#" -ne 1 ] || ! [ -d "$1" ]; then
  echo "Usage: $0 DIRECTORY" >&2
  exit 1
fi

변환 : 인수 수가 (숫자 적으로) 1이 아니거나 첫 번째 인수가 디렉토리가 아닌 경우 stderr에 사용법을 출력하고 실패 상태 코드로 종료하십시오.

보다 친숙한 오류보고 :

#!/bin/sh
if [ "$#" -ne 1 ]; then
  echo "Usage: $0 DIRECTORY" >&2
  exit 1
fi
if ! [ -e "$1" ]; then
  echo "$1 not found" >&2
  exit 1
fi
if ! [ -d "$1" ]; then
  echo "$1 not a directory" >&2
  exit 1
fi

1
@Andrew K : 어떤 라인에보고합니까? "if"줄인 경우 두 절 중 하나를 잘라내 if [ "$#" -ne 1 ] ; then거나 if ! [ -d "$1" ]; then어느 절이 문제를 일으키는 지 확인하십시오.
Laurence Gonsalves 1

고마워요 파일 이름이 없으면 어떻습니까?
Andrew K

존재하지 않는 한 == 감독이 아님 -d . 별도의 수표를 추가 -e하려면 존재 여부를 확인 하는 데 사용할 수 있습니다 .
Laurence Gonsalves

[-e "$ 1"]이면 echo "$ 1 : 해당 디렉토리 없음"exit 1 fi
Andrew K

@Andrew K : 수표를 뒤집으려고합니다. -e파일이 존재하면 true를 반환합니다. 답변에 더 친숙한 오류보고를 추가했습니다.
Laurence Gonsalves

22

고양이 script.sh

    var1=$1
    var2=$2
    if [ "$#" -eq 2 ]
    then
            if [ -d $var1 ]
            then
            echo directory ${var1} exist
            else
            echo Directory ${var1} Does not exists
            fi
            if [ -d $var2 ]
            then
            echo directory ${var2} exist
            else
            echo Directory ${var2} Does not exists
            fi
    else
    echo "Arguments are not equals to 2"
    exit 1
    fi

아래와 같이 실행하십시오-

./script.sh directory1 directory2

출력은 다음과 같습니다-

directory1 exit
directory2 Does not exists

14

" $#"를 사용 하여 명령 행에 전달 된 총 인수 수를 확인할 수 있습니다. 예를 들어 내 쉘 스크립트 이름은 다음과 같습니다.hello.sh

sh hello.sh hello-world
# I am passing hello-world as argument in command line which will b considered as 1 argument 
if [ $# -eq 1 ] 
then
    echo $1
else
    echo "invalid argument please pass only one argument "
fi

출력은 hello-world

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.