문제

mailx -s "Report for $DATE_TENDAYS_FORMAT1" -r uname@host.com uname@host.com <<EOF

Total Items Purchased as per EDW: `echo $QUERY_TEN_DAYS3 | awk '{print $1}'`

Total Items Missing or Mismatch : `echo $QUERY_TEN_DAYS3 | awk '{print $2}'`

Mismatch  Percentage: `100*((echo $QUERY_TEN_DAYS3 | awk '{print $2}')/(echo $QUERY_TEN_DAYS3 | awk '{print $1}'))`

EOF

때마다 나를 보내려고 이메일을 사용하여 mailx 위의 구문,나는 항상 오류에 세 번째 줄 (Mismatch Percentage) on * sign.아무 잘못이 나는 일에 곱셈 프로세스에서 세 번째 줄?

업데이트:-

TEST1=`echo $QUERY_TEN_DAYS3 | awk '{print $1}'`
echo $TEST1

TEST2=`echo $QUERY_TEN_DAYS3 | awk '{print $2}'`
echo $TEST2

mailx -s "Report for $DATE_TENDAYS_FORMAT1" -r uname@host.com uname@host.com <<EOF
Comparison using previous day’s data

******************************************

Mismatch  Percentage: $((100 * ($TEST2/ $TEST1)))

EOF

가 위의 코드는 여전히 나에게 오류가 첫번째 줄에로 ( unexpected.어떤 생각이 왜 일어나고 있는가?

도움이 되었습니까?

해결책

나를 위해 작품 :

그래서 문제는 실제로 bash (또는 최신 버전)를 사용하지 않는 것과 같이 문제가 발생하거나 여기에 게시 된 것을 실행하지 않고 스크립트 파일의 EOL 문자의 문제가 발생하지 않습니다.

$ echo $BASH_VERSION
3.00.15(1)-release

$ QUERY_TEN_DAYS3="1 2"

$ TEST1=`echo $QUERY_TEN_DAYS3 | awk '{print $1}'`
$ echo $TEST1
1

$ TEST2=`echo $QUERY_TEN_DAYS3 | awk '{print $2}'`
$ echo $TEST2
2

$ cat <<EOF
> Comparison using previous day’s data
>
> ******************************************
>
> Mismatch  Percentage: $((100 * ($TEST2/ $TEST1)))
>
> EOF
Comparison using previous day’s data

******************************************

Mismatch  Percentage: 200
.

다른 팁

를 사용하여 미리 정의된 변수에 대한 부분 부분을 피할 수 있습 긴 명령 라인과 혼란이 있습니다.

Infact,고 echo + awk 추출 부품을 것입니다.에 따라 다른 측면의 모듈을,그것이 더 좋을 수 있습으로 그들을 넣어는 별도의 변수를 시작하려면,오히려 이상으로 $QUERY_TEN_DAYS3.

지금 가정하여 우리와 함께 붙어 $QUERY_TEN_DAYS3, 며,그것은 공백으로 구분 가치에 양식 "DIVISOR DIVIDEND ...", 다른 방법은 다음과 같이

read -r FOO BAR JUNK <<<"$QUERY_TEN_DAYS3"

그런 다음 우리를 얻을:

mailx -s "Report for $DATE_TENDAYS_FORMAT1" -r uname@host.com uname@host.com <<EOF

Total Items Purchased as per EDW: $FOO

Total Items Missing or Mismatch : $BAR

Mismatch  Percentage: $((100 * ($BAR / $FOO)))

EOF

의 위치를 괄호 할 부문 처음(자르기 전에 곱)보 불확실이지만,그것은 당신이 무엇을 했다.를 사용하여 변수,그것은 훨씬 쉽게 발견점은 이렇습니다.

이것이 Bash 쉘이라고 가정하면 와 같은 표현식을 사용할 수 있습니다.

$((100 * 4))
.

산술 표현을 평가할 수 있습니다.제공 한 큰 표현식으로 '4'를 대체하십시오.

이 작업을 시도하십시오 :

$((100 * $(echo $QUERY_TEN_DAYS3 | awk '{print $2}') / $(echo $QUERY_TEN_DAYS3 | awk '{print $1}')))
.

expr 명령 또는 명령을 사용하는 다른 방법이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top