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

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

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 ))

관련 정보