修改Shell脚本:未提供序列号和部件号时终止运行
解决Shell脚本参数缺失仍执行的问题
要让脚本在-s(序列号)或-m(部件号)参数缺失时终止运行,只需做两处关键修改:
- 移除序列号和部件号的默认赋值,确保只有通过命令行传入参数时变量才会有值
- 在参数解析完成后,添加校验逻辑,检查两个参数是否都已传入
修改后的完整脚本如下:
usage () { echo -e "Usage: sudo bash step1.sh -s serial_number -m prod_model_number" } # 移除默认赋值,仅在传入参数时赋值 serial_number= prod_model= while getopts s:m: opt do case $opt in s) serial_number="$OPTARG" ;; m) prod_model="$OPTARG" ;; '?') usage exit 1 ;; esac done # 校验参数是否齐全,任一缺失则打印用法并退出 if [ -z "$serial_number" ] || [ -z "$prod_model" ]; then echo -e "错误:序列号和部件号参数均为必填项" usage exit 1 fi echo -e "Serial number ($serial_number)" echo -e "Product model ($prod_model)" # Silently remove log file if [ -e "$LOCAL_STEP_ONE_LOGFILE" ]; then rm -f "$LOCAL_STEP_ONE_LOGFILE" fi echo -e "Serial number ($serial_number)" >> "$LOCAL_STEP_ONE_LOGFILE" echo -e "Product model ($prod_model)" >> "$LOCAL_STEP_ONE_LOGFILE" /bin/bash ./0_get_EK_pub.sh >> "$LOCAL_STEP_ONE_LOGFILE" /bin/bash ./1_generate_IAK.sh >> "$LOCAL_STEP_ONE_LOGFILE" /bin/bash ./2_generate_IDevID.sh >> "$LOCAL_STEP_ONE_LOGFILE" /bin/bash ./3_certify_IDevID_with_IAK.sh >> "$LOCAL_STEP_ONE_LOGFILE" /bin/bash ./4_build_csr_idevid.sh -s "$serial_number" -m "$prod_model" >> "$LOCAL_STEP_ONE_LOGFILE"
关键改动说明:
- 移除默认值:原脚本的默认值会导致即使不传入参数,脚本也会用预设值继续执行,删除后变量初始为空,确保只有传入参数才会被赋值
- 参数校验逻辑:使用
-z检查变量是否为空,只要其中一个参数缺失,就打印错误信息和用法,然后退出脚本 - 额外优化:给所有变量引用加上双引号(比如
"$LOCAL_STEP_ONE_LOGFILE"),避免路径或参数包含空格时出现异常
内容的提问来源于stack exchange,提问作者Heman
相关产品推荐
相关产品推荐

