shell学习 - 处理脚本的多参数输入

本文介绍了如何在Shell脚本中处理多参数输入,包括通过逻辑遍历和使用`getopt`函数进行解析。重点讲解了`shift`函数的作用以及如何处理参数超过9个的情况,还提到了`getopt`函数在规范和解析复杂参数时的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言


一般许多 shell 脚本都希望支持多个参数的输入,一般程序的起始函数 main 都会有一个args选项代表着输入的参数项,那么解析这些参数项就是今天的主要任务。
这里有两种解析方法:

  • 通过逻辑遍历所有的输入参数(主要利用 shift 函数或者 shell 对数组的处理)

  • 利用系统自带的函数 getopt 配合 shift 进行格式化解析(不一定所有系统都有,需要检测一下)


使用 shift 解析脚本的参数输入


shell脚本中使用$后加特定标记来获取脚本的传入参数,详见下表:

参数 描述
$0 命令本身,类似于C的args[0]
$1/$2…… 表示第一个参数、第二个参数
$# 表示参数个数
$@ 用列表形式返回参数列表,但不包括$0
$? 执行上一个命令所返回的结果

shell脚本中,$1$9相当于一个双向队列,脚本的参数按顺序进入$1-$9变量中。如果参数个数大于9,就需要通过shift函数来处理。
shift函数的功能:让第一个参数出队列,队列中顺序左移,第10个参数入队列到$9变量中。
因此,shift函数可以用来处理脚本参数超过9个的情况,但更多的是用来解析脚本多个参数。

shift可以把参数列表左移1个,同时参数个数减1;shift 2可以把参数列表左移2个,同时参数个数减2;特别要注意的是当参数个数为2时,shift 3运行会出错(返回1,可以$?检查是否执行成功)

xxx.sh:

shift 3;
echo "$?"
echo "$#"

执行

chmod +x xxx.sh
./xxx.sh -1 -2

输出:

1
2

可以看出,shift 3执行失败,参数没有进行左移。
因此,在处理脚本参数的时候,必要情况需要判断shift是否成功。当然getopt函数可以很大程度的避免这些判断逻辑。
这里主要运用$#$@这两个变量即可遍历所有的传入参数,在不使用getopt这个函数的情况下,要遍历所有的输入参数可以参考如下脚本:

#!/bin/bash

until [ $# -eq 0 ]
do
    case "$1" in
        -h|--help)
            echo "-h | --help";
            exit 0
            ;;
        -a|--along
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值