오늘이 매월 15일인지 확인하는 bash 스크립트를 원합니다 .
if [ $dayOfMonth == 15 ]
then
echo "15th day of month
fi
답변1
이 명령은 형식 문자열을 사용하여 명령을 date +%d
호출 하여 해당 월의 날짜를 가져오는 데 사용할 수 있습니다 . 형식 문자열은 매뉴얼에 설명되어 있을 수 있지만 확실히 C 함수 매뉴얼에 설명되어 있습니다 . 월의 날짜를 두 자리 숫자로 제공합니다(제로 패딩 가능).date
%d
date
strftime()
테스트에 사용할 수 있습니다.
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이 하나만 있기 때문에 작동합니다.