에 곱셈 쉘 스크립트는 동안 사용하여 메일을 보내 mailx
문제
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 명령 또는 명령을 사용하는 다른 방법이 있습니다.