한 달이 몇 일인지 확인하는 방법은 무엇입니까?

한 달이 몇 일인지 확인하는 방법은 무엇입니까?

오늘이 매월 15일인지 확인하는 bash 스크립트를 원합니다 .

if [ $dayOfMonth == 15 ]
then
  echo "15th day of month
fi

답변1

이 명령은 형식 문자열을 사용하여 명령을 date +%d호출 하여 해당 월의 날짜를 가져오는 데 사용할 수 있습니다 . 형식 문자열은 매뉴얼에 설명되어 있을 수 있지만 확실히 C 함수 매뉴얼에 설명되어 있습니다 . 월의 날짜를 두 자리 숫자로 제공합니다(제로 패딩 가능).date%ddatestrftime()

테스트에 사용할 수 있습니다.

day=$( date +%d )

if [ "$day" = "15" ]; then
   echo 'the 15th'
fi

여기에 사용된 참조와 문자열 간의 동일성 테스트는 단일 테스트로 수행된다는 점에 유의 =하세요 [ ... ].

실제로 사용하고 있다고 생각되는 최신 버전의 쉘 (4.2+)에서는 다음을 bash사용하여 해당 월의 날짜를 얻을 수도 있습니다.

printf -v day '%(%d)T' -1

이는 외부 명령에 의존하지 않고 변수를 day이번 달의 날짜로 설정합니다 date. -1현재 날짜와 시간을 나타냅니다 .설명서의 설명을 참조하세요.

답변2

$ date --help
Usage: date [OPTION]... [+FORMAT]
  %d   day of month (e.g., 01)

따라서 문자열 동일성을 사용합니다(예: 최대 9까지의 숫자에는 앞에 0이 필요합니다 = "09").

if [ "$(date +%d)" = "15" ]; then …

또는 숫자 동등성을 사용합니다(앞에 0이 필요하지 않습니다. 예를 들어 -eq 9).

if [ "$(date +%d)" -eq 9 ]; then …

Bash에서는 단일 괄호 대신 이중 괄호로 사용할 [[ $(date +%d) -eq 9 ]]때 선행 0을 숫자가 8진수임을 나타내는 것으로 처리하기 때문에 이것이 작동하지 않습니다 . -eq마찬가지로 산술 표현식을 사용하면 모든 쉘은 선행 0을 8진수를 나타내는 것으로 처리하므로 이와 같은 것은 (($(date +%d) == 9))작동하지 않습니다. ( (($(date +%d) == 15))작동하지만 매월 8일과 9일에 오류 메시지가 표시됩니다.) dayOfMonth=$(date +%d); dayOfMonth=${dayOfMonth#0}; ((d == 9))날짜의 경우 앞에 0이 하나만 있기 때문에 작동합니다.

관련 정보