我正在尝试在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.
...之后,我在Google上搜索,我在子例程上找到了一些没有"()"的示例。但是我得到了:
[root@bpmnprd01]/root/health_check# ./servers_check.sh
./servers_check.sh[30]: 0403-057 Syntax error at line 33 : `StatusCheck' is not expected.
预先感谢tiago
aix有一个真正的bourne shell,居住在/bin/sh中,不确定/usr/bin/sh,但希望这也是伯恩·贝壳。
将您的脚本标题(#SHEBANG!)更改为
#!/usr/bin/bash
或which bash
ihth
您使用的是bash特定语法,但使用sh
调用脚本,该脚本具有更多的功能。由于您想使用sh
,因此可以使用checkbashisms
或shellcheck
之类的工具来帮助发现不可支配的语法。
直接问题是function foo() { ..; }
不是符合POSIX的函数定义,您应该删除关键字function
并仅使用foo() { ..; }
。
您的外壳也可能缺少[[ ]]
,在这种情况下,您应该使用[ ]
,而不是=
而不是==
。