쉘 스크립트에서 부동 소수점 연산을 수행하려고 합니다. 나는 awk
이것이 명령줄에서 수행될 수 있다는 것을 이해하지만 그것이 작동하는 방식은 쉘 스크립트로 전달되지 않는 것 같습니다. 아래를 입력 하면 awk
마치 bash가 인식하지 못한다는 듯이 회색으로 변합니다. 실행하면 $ ./script a 30 40
0이 나오네요. 내가 뭘 잘못했나요?
#!/bin/bash
if [ $1 = a ]
then
echo | awk '{print $2 + $3}'
답변1
#!/bin/bash
if [ $1 = a ]
then
echo "$@" | awk '{print $2 + $3}'
fi
$2와 $3은 스크립트의 $1과 아무 관련이 없지만 awk에 있습니다.
답변2
전달된 매개변수를 항상 신뢰한다면 다음을 고려하십시오.
$ cat script
awk 'BEGIN{ print '"$*"' }'
$ ./script 30 + 40
70
$ ./script 30 \* 40
1200
$ ./script 30 / 40
0.75
*
전역 문자이므로 이스케이프가 필요합니다 . 그렇지 않으면 매개변수가 인용됩니다. 예:
$ ./script '30 * 40'
1200
또한 이 접근 방식을 사용하면 간단한 산술 표현식에만 국한되지 않습니다.
$ ./script 'log(10)'
2.30259
$ ./script 'exp(10)'
22026.5
$ ./script '10^2 - sqrt(9)'
97