美文网首页命令行/Shell
shell的参数格式赋值及获取

shell的参数格式赋值及获取

作者: 独孤流 | 来源:发表于2019-08-27 19:36 被阅读0次

Tips:
写shell脚本时有个很痛苦的事情,那就是传递参数时需要用1,2这种方式来获取,缺乏可读性,于是写了一个方法来从参数列表里读取出来

function parseParams()
{
  # 获取的key
    findKey=""
    #获取最后一个参数,表示取的key
    count=0
    for i in "$@"; do
      # echo ">>>> $i\n"
      count=`expr $count + 1`
      if [ $count == $# ]; then
        findKey="$i="
      fi
   done

   #取出对应的key所获取的值
    for var in $@
    do
        # echo $var
        if [[ $var =~ ^$findKey* ]]; then
          #打印查找到的内容
          echo ${var#*$findKey}
          return 0
        fi
    done
    return 0
}
#demo
function test()
{
   name=`parseParams $@ "--name"`
   age=`parseParams $@ "--age"`
   country=`parseParams $@ "--country"`
   echo "paramsOne:$1"
   echo "name: $name"
   echo "paramsTwo:$2"
   echo "age: $age"
   echo "paramsThree:$3"
   echo "country: $country"
}
test --name="哪吒 hello world" --age="19" --country="china"

paramsOne:--name=哪吒 hello world
name: 哪吒
paramsTwo:--age=19
age: 19
paramsThree:--country=china
country: china

#支持包含空格的字符串
function parseParams2()
{
  # 获取的key
    findKey=""
    #获取最后一个参数,表示取的key
    count=0
    for i in "$@"; do
      count=`expr $count + 1`
      if [ $count == $# ]; then
        findKey="$i"
      fi
   done

  #查找匹配的内容
   index=0
   param_key=""
   param_val=""
    for i in "$@"; do
      index=`expr $index + 1`
      if  [ $index -ge $count ]; then
        if  [ "$param_key" == "$findKey" ]; then
          echo $param_val
        fi
        return 0
      fi
      if [[ $i == *=*  ]]; then
        if  [ "$param_key" == "$findKey" ]; then
          echo $param_val
          return 0
        fi
         arr=(${i//=/ })
         param_key=${arr[0]}
         param_val=${i#*$param_key=}
      else
        param_val=`echo "$param_val $i"`
      fi
   done
}
function test2()
{
   name=`parseParams2 $@ "--name"`
   age=`parseParams2 $@ "--age"`
   country=`parseParams2 $@ "--country"`
   echo "paramsOne:$1"
   echo "name: $name"
   echo "paramsTwo:$2"
   echo "age: $age"
   echo "paramsThree:$3"
   echo "country: $country"
}
test2 --name="哪吒 hello world" --age="19" --country="china"

paramsOne:--name=哪吒 hello world
name: 哪吒 hello world
paramsTwo:--age=19
age: 19
paramsThree:--country=china
country: china

相关文章

  • shell的参数格式赋值及获取

    Tips:写shell脚本时有个很痛苦的事情,那就是传递参数时需要用2这种方式来获取,缺乏可读性,于是写了一个方法...

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

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

  • shell(三)

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

  • Shell 传递参数

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

  • 学习Shell - 传递参数

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

  • shell传递参数

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

  • Shell 传递参数

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

  • Shell 传递参数

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

  • shell 传递参数

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

  • Shell变量传递

    传递参数 在执行Shell脚本时,可以向脚本传递参数,脚本内获取参数的格式为:$n,n代表数字,指示执行脚本的第n...

网友评论

    本文标题:shell的参数格式赋值及获取

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