You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Shell脚本:未提供序列号和部件号时终止运行

解决Shell脚本参数缺失仍执行的问题

要让脚本在-s(序列号)或-m(部件号)参数缺失时终止运行,只需做两处关键修改:

  1. 移除序列号和部件号的默认赋值,确保只有通过命令行传入参数时变量才会有值
  2. 在参数解析完成后,添加校验逻辑,检查两个参数是否都已传入

修改后的完整脚本如下:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:18:16