【问题标题】:Using EOF in ksh function在 ksh 函数中使用 EOF
【发布时间】:2015-12-01 16:35:39
【问题描述】:

我正在编写一个脚本来将命令传递到控制台并将输出重定向到日志以进行分析。这是我现在的脚本。

#!/bin/ksh
gg_sci(){
$GG_HOME/ggsci <<EOF > /home/org/obey.log
obey /home/org/mon.oby
EOF
}
check_st(){
status=`cat obey.log | grep -i $1 | awk '$2!=""{print $2}'`
echo $status
if [ $status -eq "RUNNING" ]
then
    echo "GG process $1 is running"
    exit 0
}
gg_sci
check_st test

如果我将 2 个函数放入 2 个不同的脚本中,则此脚本有效。当我将它们放入一个脚本时,我得到一个错误

ksh: 0403-057 语法错误: `}' 不是预期的。

调试后,我确定 EOF 正在读取关闭函数的 }。我不确定我做错了什么,如果这是脚本中唯一的事情,EOF 函数可以正常工作。

【问题讨论】:

    标签: linux ksh eof


    【解决方案1】:

    您缺少fi 来关闭您的if

    另外,-eq 用于检查数字是否相等,比较字符串使用=

    check_st(){
        status=`cat obey.log | grep -i $1 | awk '$2!=""{print $2}'`
        echo "$status"
        if [ "$status" = "RUNNING" ]
        then
            echo "GG process $1 is running"
            exit 0
        fi
    }
    

    【讨论】:

    • 你是对的。感谢您的帮助……我觉得很愚蠢,最小的错误最容易错过。
    • 在编辑时,还要在$status 周围加上引号(当状态为空或有空格时会发生什么)。只需对所有变量使用引号并(在这种情况下是无辜的)使用花括号:"${status}"
    • @Walter 说得好,虽然我个人不喜欢单独写大括号。
    猜你喜欢
    • 2012-08-01
    • 2017-02-02
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 2011-10-14
    • 2012-02-22
    相关资源
    最近更新 更多