首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >korn脚本选项未正确查找getopts

korn脚本选项未正确查找getopts
EN

Stack Overflow用户
提问于 2021-09-23 17:32:49
回答 1查看 10关注 0票数 0

我有一个korn脚本可以做到这一点:

testing.ksh:

代码语言:javascript
运行
复制
 m_Ftp -t'echo "No skipping"' -f DEV_OVR MMMM <<!
  lcd ${REMOTE_DIR}
  pwd
  cd ${DEST_DIR}
  ls
  put test11.txt
  bye
!

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

调用的其他脚本中的m_Ftp:

代码语言:javascript
运行
复制
  # 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

输出:

代码语言:javascript
运行
复制
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的正确内容:

代码语言:javascript
运行
复制
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时,它显示不正确。

EN

回答 1

Stack Overflow用户

发布于 2021-09-24 13:29:15

这将返回正确的选项并删除它们,使站点位于$1中:

代码语言:javascript
运行
复制
  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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69304570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档