我正尝试在AIX中实现一个小的bash脚本,但我遇到了一些问题。下面你可以找到一个例子。我还有另一个问题,如果我想把这个脚本添加到Crontab中,我想我在从IBM调用serverStatus.sh时会遇到问题,如何避免这个问题。
#!/usr/bin/sh
WAS_HOME="/usr/IBM/WebSphere/AppServer/profiles/bpmnprd01/"
function StatusCheck()
{
$WAS_HOME/bin/serverStatus.sh BPM.AppTarget.bpmnprd01.0 -username admin -password admin
status=$(cat /usr/IBM/WebSphere/AppServer/profiles/bpmnprd01/logs/BPM.AppTarget.xxxxx/serverStatus.log| awk '{ if (NF > 0) { last = $NF } } END { print last }' "$@")
text="STOPPED"
if [[ $text == $status ]]
then
echo "OK"
else
echo "NOK"
fi
}
function start()
{
StatusCheck
}
start
-----------------------当我尝试执行上面的脚本时,我得到以下错误:
[root@bpmnprd01]/root/health_check# ./servers_check.sh
./servers_check.sh[7]: 0403-057 Syntax error at line 7 : `(' is not expected.我在谷歌上搜索这个,我在subroutine.But上找到了一些没有"()“的例子,我得到了这个:
[root@bpmnprd01]/root/health_check# ./servers_check.sh
./servers_check.sh[30]: 0403-057 Syntax error at line 33 : `StatusCheck' is not expected.提亚戈,提前感谢
发布于 2014-01-30 23:25:17
AIX在/bin/sh中有一个真正的bourne shell,对/usr/bin/sh不太确定,但希望它也是Bourne shell。
更改脚本标题行( #shebang!)至
#!/usr/bin/bash或者是which bash的结果
IHTH
发布于 2014-01-31 00:24:32
您使用的是特定于bash的语法,但是使用sh调用脚本,它的功能更有限。由于您希望使用sh,因此可以使用checkbashisms或shellcheck之类的工具来帮助揭示不可移植的语法。
直接的问题是,function foo() { ..; }不是一个符合POSIX的函数定义,您应该去掉关键字function,只使用foo() { ..; }。
您的shell也可能缺少[[ ]],在这种情况下,您应该使用[ ],使用=而不是==。
https://stackoverflow.com/questions/21460142
复制相似问题