当前位置: 首页 > news >正文

bash脚本-z检查参数是否为空

Bash 脚本案例:使用 -z 检查参数是否为空

以下是一个完整的脚本示例,演示如何使用 -z 检查用户是否提供了必要的参数,并根据参数执行不同操作:


脚本功能
  1. 检查用户是否输入了 名字年龄(两个必填参数)
  2. 如果没有提供参数,显示错误并退出
  3. 如果提供了参数,打印欢迎信息

脚本代码
#!/bin/bash
# 脚本名称:greet_user.sh
# 功能:检查用户输入参数并打印欢迎信息# 检查参数是否为空
if [ -z "$1" ] || [ -z "$2" ]; thenecho "错误:缺少参数!"echo "用法: $0 <名字> <年龄>"exit 1
fi# 如果参数正确,打印欢迎信息
name="$1"
age="$2"echo "----------------------------------------"
echo "欢迎, $name!"
echo "年龄: $age 岁"
echo "----------------------------------------"

脚本解析

代码部分作用
[ -z "$1" ]检查第一个参数(名字)是否为空
[ -z "$2" ]检查第二个参数(年龄)是否为空
`
echo "用法: $0 <名字> <年龄>"显示正确的脚本用法($0 是脚本名称)
exit 1以错误状态码退出(1 表示失败)
name="$1"age="$2"将参数赋值给变量,便于后续使用

运行测试

测试 1:不提供参数(触发错误)
$ ./greet_user.sh

输出

错误:缺少参数!
用法: ./greet_user.sh <名字> <年龄>
测试 2:提供完整参数
$ ./greet_user.sh Alice 25

输出

----------------------------------------
欢迎, Alice!
年龄: 25 岁
----------------------------------------
测试 3:只提供一个参数(触发错误)
$ ./greet_user.sh Bob

输出

错误:缺少参数!
用法: ./greet_user.sh <名字> <年龄>

关键点总结

  1. -z 的正确使用

    • 必须用引号包裹变量(如 "$1"),否则空值会导致语法错误。
    • 可以组合 ||&& 实现多条件检查。
  2. 用户友好的错误提示

    • 显示 用法: $0 <参数> 帮助用户正确输入。
  3. 退出状态码

    • exit 1 表示错误退出,exit 0(默认)表示成功。

扩展练习

  1. 添加默认值
    如果年龄未提供,默认设为 20

    age=${2:-20}  # 如果 $2 为空,age=20
    
  2. 检查年龄是否为数字

    if ! [[ "$2" =~ ^[0-9]+$ ]]; thenecho "错误:年龄必须是数字!"exit 1
    fi
    
  3. 使用 getopts 解析命名参数
    (如 ./greet_user.sh -n Alice -a 25


http://www.dtcms.com/a/274868.html

相关文章:

  • 雨污管网智慧监测系统网络建设方案:基于SD-WAN混合架构的最佳实践
  • 计算机组成原理:以ADD指令为例讲解微指令执行流程
  • SpringCloud之Eureka
  • 当贝桌面_九联UNT403HS_hi3798mv320处理器安卓9优盘刷机和线刷烧录包
  • 第Y7周:训练自己的数据
  • 洛谷P2042 [NOI2005] 维护数列
  • 可以自定义皮肤的桌面备忘便签软件-滴哦小精灵 v1.4.5
  • 深入理解JVM
  • 视频翻译用什么软件?这里有5个高效推荐
  • 编码技术: PRBS, 8B/10B
  • MCU芯片内部的ECC安全机制
  • 提升你的AI交互技能:使用Anthropic互动提示教程
  • c语言中的数组IV
  • Qt:布局管理器Layout
  • flutter鸿蒙版 环境配置
  • Deekseek 学习笔记
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十八天
  • 信创 CDC 实战 | TiDB 实时入仓难点与解决方案解析(以 ClickHouse 为例)
  • 【面板数据】省级泰尔指数及城乡收入差距测算(1990-2024年)
  • 大模型人类反馈强化学习RLHF 凭什么火出圈?人类反馈 + 强化学习,解锁 AI 行为可控密码
  • 盛世美颜伴杭州--花皙蔻牡丹盛世美颜精华油获选“2025杭州特色伴手礼”
  • 【Quest开发】快速添加可手指触摸按钮
  • unity VR linerenderer的线会被UI盖住
  • 微算法科技基于格密码的量子加密技术,融入LSQb算法的信息隐藏与传输过程中,实现抗量子攻击策略强化
  • 20250710-2-Kubernetes 集群部署、配置和验证-网络组件存在的意义?_笔记
  • 车载诊断进阶篇 --- 关于网关转发性能引起的思考
  • JAVA入门——安装java环境
  • 智能运维管理平台:AI赋能的数字化转型引擎
  • 从大模型到云游戏,国鑫SY8108G-G4如何化身“全能AI引擎”?
  • 挥别Feign,拥抱Spring 6.1 RestClient:高可用HTTP客户端构建之路