Linux getopts&shift命令浅析

本文深入探讨了Shell命令中的shift与getopts功能,详细阐述了如何利用它们进行参数处理和选项解析。通过实例展示了如何获取特定参数、指定参数位数以及如何使用getopts命令获取并存储选项参数。此外,文章还提供了多个示例脚本,直观地演示了shift和getopts的实际应用,包括参数检查、错误提示和选项参数的捕获与处理。

在Shell命令/函数中 shift常用来获取参数值(可以突破Linux 参数值只能传入$1-$9的限制),而getopts可用来获取选项参数

对于shift,例如:

#!/bin/bash
usage()
{
  echo "usage:`basename $0` -[l|u] file [files]" >&2
  exit 1 
}   
if [ $# -eq 1 ]; then
    usage
fi
opt=""
while [ $# -ne 1 ] 
do
   opt=$1;
   case $opt in 
      -l|-L) echo "-l or -L options is specified"
             shift
             ;;
      -u|-U) echo "-u or -U options is specified"
              shift
             ;;
      *)  usage
             ;;
   esac
done

上面这个脚本试图去获取参数-l或者-u (显然以后的getopts更强大),如果没有满足条件的参数,则调用usage函数,输出错误提示信息。

所以在运行上述脚本的时候,会出现以下几种情况:

[chenwu@localhost unit20-arguments]$ ./shift.sh 
usage:shift.sh -[l|u] file [files]
[chenwu@localhost unit20-arguments]$ ./shift.sh -l 3
-l or -L options is specified

同时shift还可以指定移动的位数 ,例如常见的获取参数的最后一项的方法是:

shift `expr $# - 1`
echo $1
//将输出最后一个参数的内容

对于getopts,例如对于一个命令 常见形式command -[很多选项] file

如何获取那里面的每个选项,并且规定有些选项必须指定的呢?这些都需要依靠getopts命令来完成。

常见的应用形式:getopts options_string option(这里的option表示把刚才读取的选项值存放到option中)

例如: 下面一个例子用于获取脚本的afgh等参数,并提示一些信息

#!/bin/bash
ALL=false
HELP=false
FILE=false
VERBOSE=false
CHAR=false
while getopts :ahfgc: OPTION
do
    case $OPTION in 
    a)   ALL=true
         echo "ALL is $ALL"
         ;;
    h)   HELP=true
         echo "HELP is $HELP"
         ;;
   f)    FILE=true
         echo "FILE is $FILE"
         ;;
   c)    VERBOSE=true
         CHAR=$OPTARG
         echo "CHAR is $CHAR"
         ;;
   \?)   echo "`basename $0 ` needs -[a|h|f] -c[args] file"
         ;;
   esac
done

注意这个脚本里的:afghc: 的冒号 前面的冒号表示屏蔽脚本的系统提示错误,转而使用自己提供的错误提示方式。后面的冒号表示c这个选项为必选项,并且需要指定具体的参数值,同时需要获取到参数值后将参数值存放到变量OPTARG中,供以后读取用。

\? ?表示捕捉任意单字符,这里捕捉错误,并打印相应信息。 basename $0 表示提取脚本的名称 (例如basename ./test.sh 将将输出test.sh)

在运行这个脚本的时候,有以下几种情况:

[chenwu@localhost unit20-arguments]$ ./getopts.sh -ah -c 3
ALL is true
HELP is true
CHAR is 3

[chenwu@localhost unit20-arguments]$ ./getopts.sh -ah -c
ALL is true
HELP is true

一、数据采集层:多源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 多设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分类器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 640×480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本多样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分类),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性校验:采集时通过OpenCV的Haar级联分类器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值