美文网首页
Shell 脚本接受命令行参数

Shell 脚本接受命令行参数

作者: such_ | 来源:发表于2022-11-19 20:57 被阅读0次

方式一: 直接利用$n(n为1-9)的方式按位置进行获取

#!/bin/bash
echo "第一个参数:"$1
echo "第二个参数:"$2
echo "第三个参数:"$3

方式二: 使用内置命令getopts获取命名参数

语法:
getopts optstring varname
解析:
1. optstring是一个符合规则的字符串,如:'a:b:cd'
这表示可以传4个选项-a -b -c -d其中-a, -b选项的:表示是选项后面要有参数的
2.varname表示读取到的选项
3.特殊变量 ${OPTARG}能够获取选项后面跟的参数
4.特殊变量 ${OPTIND} 反映下一个要处理的参数索引,初始值是1
注:
1.getopts不支持长选项参数
2.对于有参数的选项必须要用空格分隔,如-a arg
3.对于没有参数的选项是可以连起来的,如 -bc 等同于 -b -c


while getopts 'a:bcd:' OPT; do
    case ${OPT} in
      a)
        echo "选项-a已经生效"
        echo "选项-a是可以带参数的,参数值为:"${OPTARG}
        ;;
      b)
        echo "选项-b已经生效"
        echo "选项-b是不需要参数的"
        ;;
      c)
        echo "选项-c已经生效"
        echo "选项-c是不需要参数的"
        ;;
      d)
        echo "选项-d已经生效"
        echo "选项-d是可以带参数的,参数值为:"${OPTARG}
        ;;
      *)
        echo "无效的参数"
        ;;
    esac
done

方式三: 使用外部命令getopt获取命名参数

语法
getopt [OPTION...] -o短选项optstring -l长选项optstring -- parameters
解析
1.getopt命令的选项说明
-a 表示是否支持长选项的简单模式(即以一个 -接长选项),必须与-l同时用
-o 后面接getopt支持短选项列表
-l 后面接getopt支持长选项列表
2.optstring是一个符合规则的字符串,如: 'a:,b:,cd::'(短选项)'apple:,banana:,cherry::'(长选项)
一个:代表必选参数
两个::代表可选参数
3.每解析一个选项,有参数的shift 2 ,没有参数的 shift

# 1.使用getopt获取一个解析后的字符串
parse_options=$(getopt -o a,b:,c::,d -l apple,banana:,cherry:: -- $@)

# 2.将传递的参数设置成刚解析的字符串,
# --代表传递的参数,eval是为了防止有shell关键字和可选参数的的空格识别
eval set -- $parse_options

# 3.遍历参数
while true; do
    case "$1" in
      -a | --apple)
          echo "I have an apple!"
          shift
          ;;
      -b | --banana)
          echo "I have a banana,banana is $2"
          shift 2
          ;;
      -c | --cherry)
          case $2 in
            '')
                echo "I have a cherry!"
                shift 2
                ;;
            *)
                echo "I have a cherry!It is $2"
                shift 2
                ;;
          esac
          ;;
      -d)
          echo "I have a dog!"
          shift
          ;;
      --)
          shift
          break
          ;;
      *)
          echo "Parse Error!"
          exit 1
          ;;
    esac
done

getoptsgetopt的区别

1.getopts 是Shell内建命令 , getopt 是一个独立外部工具

2.getopts 使用语法简单 , getopt 使用语法复杂

3.getopts 不支持长选项, getopt 支持长选项

4.getopts 不会重排所有参数的顺序,getopt 会重排参数顺序

5.getopts 的Shell内置 OPTARG 这个变量,getopts 通过修改这个变量依次获取参数, getopt 必须使用 set 来重新设定位置参数,然后在 getopt 中使用 shift 来依次获取参数

6.getopts 可以接受参数有空格, getopt 只有新版的才可以有空格

相关文章

  • shell脚本如何传递给子脚本命令行参数

    shell脚本如何传递给子脚本命令行参数 shell脚本可以使用getops来分析命令行参数,现在的一个使用场景是...

  • Linux系统shell使用几点摘录(二)

    Shell脚本命令行参数说明 参数名称参数含义 $$表示Shell本身的PID(ProcessID) $!表示Sh...

  • 第14章:处理用户输入

    [TOC] #1. 命令行参数 向shell脚本传递数据的最基本方法是使用命令行参数。命令行参数允许在运行脚本时向...

  • Linux Shell编程之Bash中的位置参数

    什么是位置参数 位置参数指的是 shell 脚本的命令行参数,同时也表示 shell 函数的函数参数。Bash中的...

  • 执行shell脚本传递参数的方式

    在执行shell脚本的时候,会经常遇到需要向shell脚本传递参数的情况。即是对命令行选项、参数处理的方式。例如:...

  • Shell (六)

    Shell 命令行参数 在脚本中通过 $1, $2, $3, 引用参数${10} 时,参数必须在大括号中。 脚本的...

  • 标准化linux脚本的参数选项

    linux系统本身提供了很多命令行参数,为了增加shell脚本的友好型,我们脚本的命令行参数可以和系统参数保持一致...

  • 常用的npm包

    命令行参数处理 nodejs 脚本,命令行参数处理,接受参数parse 可以使用 minimist 参数提示 co...

  • 2021-09-09

    shell脚本调用python 传参数 2、接受python运行结果

  • getopts 解析bash 命令行参数

    getopts 解析bash 命令行参数 Shell脚本中的一项常见任务是解析命令行参数。 Bash提供了内置函数...

网友评论

      本文标题:Shell 脚本接受命令行参数

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