Bash 스크립트에 두 개의 매개변수(directory)가 있는지 확인하세요.

Bash 스크립트에 두 개의 매개변수(directory)가 있는지 확인하세요.

두 디렉터리를 비교하는 bash 스크립트를 작성 중인데 조건을 확인하는 방법을 잘 모르겠습니다.

예를 들어, 사용자가 2개 대신 1개의 인수를 입력하면(두 디렉터리를 비교하기 때문에 2개가 필요함) 오류가 발생해야 합니다. 두 인수가 모두 유효하면 디렉터리가 비교되어 파일로 출력됩니다.

답변1

처리 매개변수

스크립트 명령줄을 통해 전달된 매개변수를 처리하는 방법은 아래와 같이 매우 간단합니다. 다음 스크립트가 있다고 가정해 보겠습니다.

$ cat cmd.bash 
#!/bin/bash

echo "arg1: $1"
echo "arg2: $2"

이제 인수 없이 실행합니다.

$ ./cmd.bash 
arg1: 
arg2: 

매개변수가 1개 있습니다:

$ ./cmd.bash hi
arg1: hi
arg2: 

2개의 매개변수가 있습니다:

$ ./cmd.bash hi bye
arg1: hi
arg2: bye

매개변수 확인

그런 다음 매개변수 1과 2가 유효한 디렉토리인지 확인하고 필요에 따라 종료하거나 계속할 수 있습니다. 따라서 2개의 매개변수가 디렉토리인지 확인하고 그렇지 않으면 종료하기 위해 2개의 검사를 도입합니다.

$ cat cmd.bash
#!/bin/bash

[ -d "$1" ] || exit
[ -d "$2" ] || exit
[ $# == 2 ] || exit

echo "arg1: $1"
echo "arg2: $2"

이러한 디렉토리가 있다고 가정해 보겠습니다.

$ mkdir d1 d2

$ ls -l
total 12
-rwxrwxr-x. 1 saml saml   89 Oct 14 23:13 cmd.bash
drwxrwxr-x. 2 saml saml 4096 Oct 14 23:14 d1
drwxrwxr-x. 2 saml saml 4096 Oct 14 23:14 d2

2개 디렉토리 이외의 디렉토리가 주어지면 스크립트가 직접 종료됩니다.

$ ./cmd.bash hi bye

디렉토리가 2개 있는 경우:

$ ./cmd.bash d1 d2
arg1: d1
arg2: d2

2개 이상의 매개변수를 제공하는 경우:

$ ./cmd.bash d1 d2 d3

이 두 디렉토리의 비교는 여러분에게 맡기겠습니다. Bash를 배우려면 아래 Bash에 대한 무료 온라인 도서 링크를 안내해 드리겠습니다.

인용하다

답변2

매개변수의 개수는범위$#.

if [ $# -ne 2 ]; then
  echo 1>&2 "Usage: $0 DIRECTORY1 DIRECTORY2"
  exit 3
fi

인수를 모두 디렉토리(다른 유형의 파일과 반대)로 강제하려면 다음을 사용하십시오.-d.

실용적인 사항diff두 파일을 비교합니다. options 을 사용하면 -r디렉토리를 재귀적으로 비교합니다.

diff -ru -- "$1" "$2"

관련 정보