【问题标题】:korn script options not finding getopts correctlykorn 脚本选项未正确找到 getopts
【发布时间】:2021-11-17 02:55:15
【问题描述】:

我有一个执行此操作的 korn 脚本:

testing.ksh:

 m_Ftp -t'echo "No skipping"' -f DEV_OVR MMMM <<!
  lcd ${REMOTE_DIR}
  pwd
  cd ${DEST_DIR}
  ls
  put test11.txt
  bye
!

这会调用另一个脚本来获取选项(如果有)并按预期分配变量。但是,出于某种原因,它正在这样做:

m_Ftp 在其他被调用的脚本中:

  # Get argument (-f "DEV_OVR")
  ARGVAL=""
  DEVCMD=""
  while getopts f:t: opt; do
    case $opt in
      # Oracle ID
      f) ARGVAL="$OPTARG"; shift;; #should be "No skipping"
      t) DEVCMD="$OPTARG"; shift;; #should be DEV_OVR
      ?) ;;
    esac
  done


  echo "0:" $0
  echo "1:" $1
  echo "2:" $2
  echo "3:" $3
  echo "Argval:" $ARGVAL
  echo "DEVCMD:" $DEVCMD

  #different
  M_SITE_NAME="$2"


  echo "M_SITE_NAME:" $M_SITE_NAME

输出:

0: m_Ftp
1: -f     #expect MMMM
2: DEV_OVR 
3: MMMM
Argval:
DEVCMD: echo "No skipping"
M_SITE_NAME: DEV_OVR #should be MMMM

无论给出什么选项,我都需要它来工作,以便 FTP 到正确的位置,MMMM。

我尝试在 testing.ksh 中去掉 -f 和 DEV_OVR 之间的空格,这是输出,它使站点正确,但没有显示 DEVCMD 或 Argval 的正确内容:

0: m_Ftp
1: -fDEV_OVR
2: MMMM
3:
Argval:
DEVCMD: echo "No skipping"
M_SITE_NAME: MMMM
M_FTP_SITE here: MMMM

如何让 SITE、devcmd 和 argval 正确显示?最后一个脚本版本没有在参数列表中提供 devcmd,并且从 $1 而不是 $2 获取站点名称,但是当我打印 argval 时,它显示不正确。

【问题讨论】:

    标签: getopts korn


    【解决方案1】:

    这可以返回正确的选项并将其删除,因此该网站位于 $1 中:

      ARGVAL=""
      DEVCMD=""
      while getopts f:t: opt
       do
        case $opt in
          # Oracle ID
          t) ARGVAL="$OPTARG";; #shift;;
          f) DEVCMD="$OPTARG";; #shift;;
          ?) ;;
        esac
      done
    
    shift $((OPTIND-1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      相关资源
      最近更新 更多