美文网首页
脚本调用参数传递问题

脚本调用参数传递问题

作者: 非典型IT | 来源:发表于2018-09-28 23:01 被阅读0次

问题场景:我们部署脚本到数据库主备服务器上时,脚本在主备库上的行为有差异,且我们期望当数据库角色切换后,不用DBA的介入,脚本能感知角色变化。这个要求本可以通过在脚本里添加角色判断来实现,但这意味着,我们需要在非常多的既有脚本里寻找需要进行角色判断的地方,改动的地方较大。因此我们选择了另外一种方案,加一个外部调用脚本,这个脚本进行角色判断,然后调用相应行为的脚本。

我们发现,通过传递给调用脚本(下面的 invoker.ksh)来把参数传递给被调用脚本(下面的t.ksh)时,会出现参数丢失的情况。

[Mason@oc8130141717 shell]$ cat invoker.ksh 
#!/bin/ksh

cmd="${*}"

./$cmd
[Mason@oc8130141717 shell]$ 
[Mason@oc8130141717 shell]$ cat t.ksh
#!/bin/ksh

while getopts ":c:d:" opt
do
  case ${opt} in
    c )  command_parms=${OPTARG} ;;
    d )  database=${OPTARG} ;;
  esac
done

echo "command_parms: $command_parms"
[Mason@oc8130141717 shell]$ 

# 通过-c 传递的参数部分丢失
# 仅abc传递过去了,def hij丢失
[Mason@oc8130141717 shell]$ ./invoker.ksh t.ksh -c "abc def hij"
command_parms: abc

# 其中一种解决方案如下
[Mason@oc8130141717 shell]$ 
[Mason@oc8130141717 shell]$ cat invoker.ksh 
#!/bin/ksh

cmd="${*}"

eval ./$cmd

[Mason@oc8130141717 shell]$ cat t.ksh
#!/bin/ksh

while getopts ":c:d:" opt
do
  case ${opt} in
    c )  command_parms=${OPTARG} ;;
    d )  database=${OPTARG} ;;
  esac
done

echo "command_parms: $command_parms"
[Mason@oc8130141717 shell]$ 
[Mason@oc8130141717 shell]$ ksh invoker.ksh ./t.ksh -c "'abc def hij'"
command_parms: abc def hij

--End
Mason

相关文章

  • 脚本调用参数传递问题

    问题场景:我们部署脚本到数据库主备服务器上时,脚本在主备库上的行为有差异,且我们期望当数据库角色切换后,不用DBA...

  • 2021-09-10

    python调用shell脚本 1. 传入参数 python文件 可以套用python传递参数,二次传递给shel...

  • Linux编程之变量1:bash变量与变量分类-2

    6.位置参数变量 位置参数变量就是bash将传递给脚本的参数,按照位置不同,保存在不同的位置变量中,以便于脚本调用...

  • shell-位置参数超过10个之后的问题

    前言 客户需要调用我们服务器的脚本,传递了超过10以上的位置参数, 传入参数后发现前9位的参数没什么问题,但到了1...

  • Android WebView

    常见问题 js调用android方法和传递参数 shouldOverrideUrlLoading不被调用问题 解决...

  • 工具 | Shell 教程笔记 (2)

    Shell 传递参数 在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n 其他用法: 参考 ...

  • shell(三)

    Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一...

  • shell中$0、$1、$n、$#、$*、$@的区别

    $0脚本名称 $1传递给脚本或者函数的第一个参数 $n传递给函数或者脚本的第n个参数 $#传递给函数或者脚本的参数...

  • Shell 传递参数

    Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n代表一个...

  • 学习Shell - 传递参数

    Shell传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个...

网友评论

      本文标题:脚本调用参数传递问题

      本文链接:https://www.haomeiwen.com/subject/knvmoftx.html