【问题标题】:Syntax Error at Line * ) `in Ksh?* 行的语法错误)`在Ksh中?
【发布时间】:2013-11-29 09:28:25
【问题描述】:

我试图在 Unix 中执行以下代码并得到上述错误,

请帮我更正代码

SERVER_NM=`uname -n`
case $SERVER_NM in

  infad1)   export ETL_SYS=TST
         ;;
  infasa1)   export ETL_SYS=TST
         ;;
  infasb1)   export ETL_SYS=TST
         ;;
  infap1)   export ETL_SYS=PRD
         ;;
  infap2)   export ETL_SYS=PRD
         ;;
  infap3)   export ETL_SYS=PRD
         ;;
  infap4)   export ETL_SYS=PRD
         ;;
  *)        echo "No Dir";;
esac

当我执行这个时,我得到了

 unexpected4]: syntax error at line 5 : `in and im using !/usr/bin/ksh

【问题讨论】:

  • 添加'export使其成为一个常量字符,你能用上面的代码详细说一下
  • 当我复制显示的代码时,我收到来自ksh 的警告(在 Mac OS X 10.9 Mavericks 上),应该将反引号机制替换为 $(...)(正式地说,它说:xyz.ksh: warning: line 1: `...` obsolete, use $(...) 我在其中调用脚本xyz.ksh 并在“调试”模式下运行它(ksh -vn xyz.ksh;不执行,详细)。当我运行它时,它说“No Dir”,这是合理的。问题不在您显示的代码中,或者您安装了一个非常糟糕的ksh
  • 这不是实际的代码,也不是实际的错误消息。第 5 行没有*,并且一个单独的反引号看起来像是一条被截断的消息(可能是由于 SO)。请在描述代码和错误消息时绝对准确。

标签: shell unix case ksh


【解决方案1】:

您的脚本中是否有可能出现有趣的字符,例如回车 (\r)? 请运行od -c yourscript 进行查找,如果是,请使用更好的可以显示有趣字符的编辑器(vim)或dos2unix yourscript

【讨论】:

    【解决方案2】:
    export SERVER_NM=`uname -n`
    case $SERVER_NM in
      infad1|infasa1|infasb1)  export ETL_SYS=TST ;;
      infap1|infap2|infap3|infap4)  export ETL_SYS=PRD  ;;
      *)        echo "No Dir" ;;
    esac
    echo $ETL_SYS
    

    【讨论】:

      【解决方案3】:
      SERVER_NM="`uname -n`"
      echo "${SERVER_NM}" | sed 's/infad1.*/PRD/;t;s/infasa1.*/PRD/;t;s/infasb1/TST/;t;s/infap[1-4].*/PRD/;t;s/.*/No Dir/' | read Tempo
      export ETL_SYS="${Tempo}"
      

      可能更快(取决于 SERVER_NM 的使用)

      export ETL_SYS="`uname -n | sed 's/infad1.*/PRD/;t;s/infasa1.*/PRD/;t;s/infasb1/TST/;t;s/infap[1-4].*/PRD/;t;s/.*/No Dir/'`"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-09
        • 1970-01-01
        • 2014-04-05
        • 1970-01-01
        • 1970-01-01
        • 2012-10-09
        相关资源
        最近更新 更多