Bash 스크립트에 정확히 두 개의 디렉터리 인수가 있는지 확인하세요.

Bash 스크립트에 정확히 두 개의 디렉터리 인수가 있는지 확인하세요.

두 디렉터리를 비교하는 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

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

참고자료

답변2

인수의 수는매개변수$#.

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

인수가 두 디렉터리(다른 유형의 파일이 아닌)임을 강제하려면 다음을 사용하여 테스트하세요.-d.

유틸리티diff두 파일을 비교합니다. 옵션을 사용하면 -r디렉토리를 재귀적으로 비교합니다.

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

관련 정보