Linux 如何优雅的写出命令行参数

如何优雅的写出命令行参数

1. getopts介绍

为了更好的将程序应用,我们往往会写一些命令行参数,这些参数使我们不必每一次都要打开原始代码更改一些代码。这对于没有使用过程序的人员来说,会很迷惑需要一定的时间熟悉,找到需要更改的地方。为此,我们会在C++,python以及R中写过一些命令行参数,现在我们来看看Shell脚本的写法。
getopts 是Linux Shell自带的一个函数,可以优雅的撰写命令行参数。

2. getopts语法

getopts options variable
# getopts - shell 指令
# options - 命令行参数选项,用于命令行操作(单字母或短选项)
# variable - 将命令行参数转化为shell指令中的变量
  • getoptswhile 联合,并配合 case 指令,执行循环,检查命令行参数,并判断它是否合法。即参数是否以 短横线-’ 开头,后面跟一个包含在 options 中的字母。
  • options 一般使用单字母,比如a:b:c
    • 字母后紧跟:,表明该选项必须有参数;无:的字母,表示不需要参数
    • getopts 包含两个内置变量:OPTARG和OPTIND
      • OPTARG:用以保存选项(字母)后的参数值
      • OPTIND:保存了命令行下一个选项或参数的索引
  • 返回值
    • 遍历过程中,如果命令行选项字母存在于 options 中,则选项字母赋值给 variable;
    • 如果命令行选项字母不存在于 options 中,则将 ?赋值于 variable

一些特殊的命令行参数

$0   #即命令本身,相当于c/c++中的argv[0]
$1   #第一个参数
$2, $3, $4 ...   #第2、3、4个参数,依次类推
## 主要为简单命令行参数使用

$#   #参数的个数,不包括命令本身
$@   #参数本身的列表,不包括命令本身
$*   #和$@相同,但"$*"和"$@"(加引号)并不同,
     #"$*"将所有的参数解释成一个字符串,而"$@"是一个参数数组

3. 示例

#!/bin/bash

function Usage(){
  echo "Usage:"
      echo "    $(basename $0) [options]"
      echo "          -a options 01"
      echo "          -b options 02"
      echo "          -c "
}

:<<EOF
echo "命令行参数个数(不包含命令.sh本身):" $#
echo "参数列表(不包含命令.sh本身):" $@
echo "参数(字符串形式):" $*
EOF
# 判断是否有参数
if [ $# -eq 0 ]
then
  Usage
  exit 1
fi

while getopts a:b:c opt
do

    case $opt in
      a)
          First=$OPTARG;;
      b)
          Second=$OPTARG;;
      c)
          Third=$OPTARG;;
      \?)
          Usage
          exit 1
    esac
done
# 判断参数是由值传入
if [[ ${#First} = 0 || ${#Second} = 0 ]]
then
  Usage
  exit 1
fi

echo "First option:" $First
echo "Second option:" $Second
echo "Third option:" $Third

注意

  • 当参数设置中使用带参数的选项时,一定要注意参数位置,且必须给出参数值,否则会将后一个参数作为参数值传入(赋值于OPTARG)。为避免这种情况的发生,必须注意参数书写。
./test0806.sh -a 1 -b -c
First option: 1
Second option: -c
Third option:
# -c 选项被认为是-b的值

正确的书写

./test0806.sh -a 1 -b 2 -c
First option: 1
Second option: 2
Third option:
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值