我正在尝试在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.
先谢谢 蒂亚戈
答案 0 :(得分:0)
AIX有一个真正的bourne shell,它位于/ bin / sh中,对/ usr / bin / sh不确定,但也希望它也是Bourne shell。
将脚本标题行(#shebang!)更改为
#!/usr/bin/bash
或which bash
IHTH
答案 1 :(得分:0)
您正在使用bash特定语法,但使用sh
调用脚本,其功能有限。由于您要使用sh
,因此您可以使用checkbashisms
或shellcheck
等工具来帮助发现不可移植的语法。
当前的问题是function foo() { ..; }
不是POSIX兼容的函数定义,您应该删除关键字function
并仅使用foo() { ..; }
。
您的shell可能也缺少[[ ]]
,在这种情况下,您应该使用[ ]
而不是=
而不是==
。