스크립트를 생성하는 스크립트가 있습니다.
echo '#!/bin/sh'>>rule-1
echo 'compare() (IFS=" "'>>rule-1
echo ' exec awk "BEGIN{if (!($*)) exit(1)}"'>>rule-1
echo ')'>>rule-1
echo '#Bepaal percentage memory used.'>>rule-1
echo "PERC_MEM_USED=$(free | grep Mem | awk '{print $3*100/$2}')">>rule-1
echo "echo 'Percentage memory used :'">>rule-1
echo 'echo $PERC_MEM_USED'>>rule-1
echo 'if compare "$PERC_MEM_USED > 90";'>>rule-1
echo 'then'>>rule-1
echo " echo 'Percentage memory is high.'">>rule-1
echo ' # PSM data'>>rule-1
echo " echo '(PSM)'">>rule-1
echo " echo '(CATEGORY)WARNING(/CATEGORY)'">>rule-1
echo " echo '(MESSAGE)Percentage memory is high '$PERC_MEM_USED', please contact ---(MESSAGE)'">>rule-1
echo " echo '(/PSM)'">>rule-1
echo 'fi'>>rule-1
실행하면 생성된 스크립트는 다음과 같습니다.
#!/bin/sh
compare() (IFS=" "
exec awk "BEGIN{if (!($*)) exit(1)}"
)
#Bepaal percentage memory used.
PERC_MEM_USED=11.9055
echo 'Percentage memory used :'
echo $PERC_MEM_USED
if compare "$PERC_MEM_USED > 90";
then
echo 'Percentage memory is high.'
echo '(PSM)'
echo '(CATEGORY)WARNING(/CATEGORY)'
echo '(MESSAGE)Percentage memory is high '', please contact ---(MESSAGE)'
echo '(/PSM)'
fi
변수는 $PERC_MEM_USED
행에서 확장되지 않습니다 (MESSAGE)
. 어떤 아이디어가 있나요?
답변1
변수는 빌드 스크립트에서 큰따옴표로 묶여 있으므로 확장을 방지하기 위해 run 외부에 echo
달러 기호를 백슬래시합니다. 또한 생성된 스크립트가 실행될 때 명령 대체가 실행되기를 원하는 것처럼 보이지만 현재는 스크립트가 생성될 때 실행됩니다. 이 문제를 해결하려면 해당 줄의 모든 달러 기호를 백슬래시해야 합니다.
또한 전체 블록을 중괄호로 묶고 각 줄에 추가하는 대신 닫는 중괄호 뒤에 (또는 아마도?) >>rule-1
를 추가할 수 있습니다.>> rule-1
>
또한 HERE 문서로 전환하면 줄마다 에코와 따옴표를 반복할 필요가 없습니다.
#!/bin/bash
cat <<'EOF' > rule-1
#!/bin/sh
compare() (IFS=" "
exec awk "BEGIN{if (!($*)) exit(1)}"
)
#Bepaal percentage memory used.
PERC_MEM_USED=$(free | grep Mem | awk '{print $3*100/$2}')
echo 'Percentage memory used :'
echo $PERC_MEM_USED
if compare "$PERC_MEM_USED > 90";
then
echo 'Percentage memory is high.'
# PSM data
echo '(PSM)'
echo '(CATEGORY)WARNING(/CATEGORY)'
echo '(MESSAGE)Percentage memory is high '$PERC_MEM_USED', please contact ---(MESSAGE)'
echo '(/PSM)'
fi
EOF
답변2
조로바님, 감사합니다.
이 변수는 빌드 스크립트에서 큰따옴표로 묶여 있으므로 외부 에코를 실행할 때 확장됩니다. 확장을 방지하기 위한 백슬래시 달러 기호입니다. 또한 생성된 스크립트가 실행될 때 명령 대체가 실행되기를 원하는 것처럼 보이지만 현재는 스크립트가 생성될 때 실행됩니다. 이 문제를 해결하려면 해당 줄의 모든 달러 기호를 백슬래시해야 합니다. ....이것은 효과가 있었습니다 :)