初学者bash脚本的错误

时间:2009-03-10 14:59:03

标签: linux bash cygwin

你可以帮帮我吗? 我在cygwin上以./test.sh运行它,我在第51行得到意外的文件结尾。 有什么想法吗?

提前谢谢

最后编辑:最终版本'在CygWin上运行,问题在于换行符,CrLf代替Lf。

#!/bin/sh
##################################################
## USAGE
##################################################
if [ $# -ne 1 ]; then
    echo "1>Use Extractor: $0 <MODO DE OPERACAO>"
    echo "2>Use Extractor: $0 <MODO DE OPERACAO> <DATA INICIAL> <DATA FINAL>"
    exit 127
else
    if [ $1 -lt 0 ]; then
        if [ $1 -gt 1 ]; then
            echo "2>Use Extractor: $0 <MODO DE OPERACAO> <DATA INICIAL> <DATA FINAL>"
            exit 127
        fi
    fi
fi
##################################################
## VARS
##################################################

    ##########################################
    ## AUX
    ##########################################
    set java_cmd=""
    set java_cmd_emergencial=""
    set java_cp=""

    ##########################################
    ## JAR
    ##########################################
    set db_user=""
    set db_pwd=""
    set conn_string=""
    set work_dir=""
    set output_dir=""


##################################################
## PARAMETROS
##################################################
set mode=$1
set data_ini=""
set data_fim=""
if [ $# -eq 3 ]; then
    set data_ini    = $2
    set data_fim    = $3
fi

##################################################
## CHAMADA DO JAR
##################################################
java  "$java_cp" "$java_cmd" "$mode" "$db_user" "$db_pwd" "$conn_string" "$work_dir" "$output_dir"

4 个答案:

答案 0 :(得分:3)

“set”不是bash语法。而不是“设置foo = bar”,你想要“foo = bar”。

注意:由于某种原因,我写了没有空格的更正表格。 以这种方式编写。您更新的问题仍然是错误的。

答案 1 :(得分:2)

在MacOS X 10.5.6上运行没有错误,除了这一行:

if [ $1 -lt 0 -o gt 1 ];

应该是

if [ $1 -lt 0 -o $1 -gt 1 ];

我没有评论脚本的其余部分是否真的按照它应该做的......

答案 2 :(得分:2)

您可能希望在最后一行引用必填字段。现在它将是一个空白而不是“”。

例如

java  "$java_cp" "$java_cmd" "$mode" "$db_user" "$db_pwd" "$conn_string" "$work_dir" "$output_dir"

编辑到至少在mysystem上运行java:

#################################################
#!/bin/sh
##################################################
## USAGE
##################################################
if [ $# -ne 1 ]; then
    echo "1>Use Extractor: $0 <MODO DE OPERACAO>;"
    echo "2>Use Extractor: $0 <MODO DE OPERACAO> <DATA INICIAL> <DATA FINAL>"
    exit 127
else
    if [ $1 -lt 0 -o $1 -gt 1 ]; then
        echo "1>O Parametro <MODO DE OPERACAO> deve ser 0 (Cartorios) ou 1 (Transacoes);"
        exit 127
    fi
fi
##################################################
## VARS
##################################################

    ##########################################
    ## AUX
    ##########################################
    java_cmd=""
    java_cmd_emergencial=""
    java_cp=""

    ##########################################
    ## JAR
    ##########################################
    db_user=""
    db_pwd=""
    conn_string=""
    work_dir=""
    output_dir=""


##################################################
## PARAMETROS
##################################################
mode=$1
data_ini=""
data_fim=""
if [ $# -eq 3 ]; then
    data_ini=$2
    data_fim=$3
fi

##################################################
## CHAMADA DO JAR
##################################################
java  $java_cp $java_cmd $mode $db_user $db_pwd $conn_string $work_dir $output_dir

答案 3 :(得分:2)

如果没有别的,请仔细检查脚本中最后一行末尾是否有换行符。