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