문자열을 비교할 수 없습니다

문자열을 비교할 수 없습니다

Google은 나를 도와주지 않았습니다.

#!/bin/sh

j1=`expr "$1"`
j2=`expr "$2"`

while [ $j1 -le $j2 ]; do
    date=$(ncal -e $j1)
    month=$($date | cut -f1 -d' ')
    if [ $month=="April" ]; then
        echo $date
    fi
        j1=`expr $j1 + 1`
done

나는 4월에 있는 연도에 대해서만 부활절 날짜를 인쇄하고 싶습니다(인수로 전달한 2년 사이의 범위). 하지만 어떻게 든 출력을 얻습니다.

...

April 5 2015
./script.sh: 8: March: not found
March 27 2016
./script.sh: 8: April: not found
April 16 2017

"월: 찾을 수 없음"이란 무엇입니까? 그리고 4월만 요청했는데 왜 3월이 인쇄되나요?

다양한 방법으로 시도해 보았는데 항상 오류가 발생했습니다.

그리고 4월 20일 이후의 날짜만 출력한다는 조건도 추가해야 하는데 이마저도 감당이 안되네요.

답변1

온라인에서

month=$($date | cut -f1 -d' ')

명령으로 포함된 모든 항목을 실행 $date하고 해당 출력을 cut.

내 생각엔 네가 원하는 것 같아

month=$( printf '%s\n' "$date" | cut -f 1 -d ' ' )

여기.

또한 백틱을 혼합하지 마십시오. $(...)동일한 스크립트에서는 혼란스럽습니다. 그냥 대신 사용하세요 $(...).

문자열 비교는 다음을 사용하여 수행됩니다 =.

if [ "$month" = "April" ]; then

변수를 큰따옴표로 묶어야 합니다. 보다bash/POSIX 쉘에서 변수를 인용하는 것을 잊어버린 경우의 보안 영향

정수 연산은 를 사용하여 수행할 수 있습니다 $(( expression )). expr구식입니다.

j1=$(( "$1" ))
j2=$(( "$2" ))

...

j1=$(( j1 + 1 ))

관련 정보