Shell 脚本中判断字符串非空_shell判断字符串不为空-程序员宅基地

技术标签: shell  

前言

Shell 脚本中经常用到字符串,对字符串是否为空的判断很关键。

正文

在 Shell 中利用 -n 来判断字符串是否非空。

例子:


if [[ str1 = str2 ]]   # 当字符串 str1 和 str2 有相同内容、长度时为真

if [[ str1 != str2 ]]  # 当字符串 str1 和 str2 不等时为真

if [[ -n "str1" ]]       # 当字符串 str1 的长度大于 0(非空)时为真 

if [[ -z "str1" ]]	   # 当字符串 str1 的长度为 0(空)时为真 

if [[ str1 ]]          # 当字符串 str1 为非空时为真

注意

错误用法:


str1=$*

if [[ -n $str1 ]];then
    print "with str1"
else
    print "without str1"
fi

这种情况下不管传不传参数,总会进入 if 里面,因为不加 "" 时该 if 语句等效于 if [ -n ],shell 会把它当成 if [ str1 ]来处理,-n 这个字符串不为空,所以会进入 if 里面。

正确用法:
需要在 $str1 上加入双引号,即 "$str1"


str1=$*
if [[ -n "$str1" ]];then
    print "with str1"
else
    print "without str1"
fi

额外内容

在 Shell 脚本中如果有 rm -rf ${path} 这种操作,尽量在执行前先判断变量 path 不为空,如果 path 为空,等同于执行 rm -rf / ,除此之外,在 Bash 的变量扩展语法中,可以用 rm -rf ${path:?ERROR}/* 的形式判断变量是否定义或为空,当变量未定义或为空时自动停止执行脚本,这样可以避免执行全局删除操作。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/LiLittleCat/article/details/120188514

智能推荐

matlab timesat,timesat软件怎么装怎么用-程序员宅基地

文章浏览阅读1.3k次。timesat软件怎么装怎么用?一起来看看吧一、TimeSat 3.1软件安装;本文讲解TimeSat 3.1软件在Windows和Matlab平台的安装。1、打开Matlab 2011,点击菜单中的File→Set Path,如下如下图所示的对话框,点击Add with Subfolders,定位到TimeSat3.1所在的位置,点击确定。2、打开Matlab命令窗口Command Window..._timesat

Python web 框架对比:Flask vs Django-程序员宅基地

文章浏览阅读1k次,点赞18次,收藏22次。今天我们从几个方面来比较一些现在流行的两个 python web 框架——Flask 和 Django,突出它们的主要特性、优缺点和简单案例到最后,大家将更好地了解哪个框架更适合自己的特定需求Python web 框架各式各样,但 Flask 和 Django 是最流行的两种。选择 Flask 还是 Django 取决于各种因素:比如项目规模、复杂性、可伸缩性需求和个人偏好Flask 它被设计得尽可能简约,它是小型项目、RESTful api和快速原型设计的轻量级灵活选择。_flask vs django

探索交互设计:引领用户体验的艺术与科学-程序员宅基地

文章浏览阅读340次。交互设计是现代产品设计中至关重要的领域,它不仅关乎用户与产品的互动方式,还直接影响着用户体验的质量和产品的成功与否。我们将提供教程、解答常见问题、思考交互设计的重要性,并分享有关学习交互设计的链接。教程1:交互设计基础入门 本教程将介绍交互设计的基本原理和概念,包括用户中心设计、可用性原则、信息架构等。教程2:设计人性化的交互体验 在这个教程中,我们将深入研究如何设计出人性化的交互体验。在这篇文章中,您将了解到情感设计在交互设计中的重要性,并学习如何创造出引人入胜的用户体验。链接2:情感设计的艺术与科学(

Unity3d使用ToLua lua protobuf3配合java neety protobuf3包含源码-程序员宅基地

文章浏览阅读613次。博主环境(所有文件都在最底下):Unity环境:2018.1.0b11(64bit) java环境:jdk 1.8, netty环境:netty-all-4.1.16.Final.jar protobuf环境:protobuf-java-3.3.0 python环境:python 2.7网络协议:使用简单的协议一段完整的数据,前4位byte是数据总长度,向后偏移4位是proto...

jmeter-阶梯压测-参数设置说明_jmeter阶梯加压参数如何设置比较好-程序员宅基地

文章浏览阅读739次,点赞2次,收藏8次。在进行电商测试过程中,会遇到持续加压并且运行一段时间后,缓慢释放压力的情况,对于这种可以使用阶梯压测(jp@gc-Stepping Thread Group)_jmeter阶梯加压参数如何设置比较好

ubuntu 如何转换 ppk ,连接 amazon ec2-程序员宅基地

文章浏览阅读98次。转 自 :http://www.ehow.com/how_8658327_convert-ppk-ssh-ubuntu.html1Open a terminal window in Ubuntu, or log in if you are converting the keys on a remote Ubuntu server.2Type "sud..._ubpkrpp

随便推点

1、EureKa-server组件使用-客户端启动报错_eureka注册时为什么要导入web依赖-程序员宅基地

文章浏览阅读122次。Eurek-client 客户端需要增加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>_eureka注册时为什么要导入web依赖

【Odoo16前端源码分析】env变量_odoo16修改前端代码-程序员宅基地

文章浏览阅读583次。所以,在this.component实例内部的方法中,this.env中的属性会包含更多属性。但是View没有构造函数,无法接收构造传参,就有父类Component来接管。this.component是视图类C的实例,C一般是类View。1 env变量的创建。3 传给组件节点实例。_odoo16修改前端代码

云原生环境该怎样解决网络安全问题

微隔离(Micro Segmentation),作为一种前沿的网络安全技术,其核心目标在于精准地隔离数据中心内部的东西向流量。这一技术的实现原理是将数据中心内部的各类业务,遵循特定原则,细致划分为众多微小的网络节点。这些节点通过动态策略分析进行访问控制,从而在逻辑层面上实现相互隔离,有效限制用户的横向移动,确保了网络环境的稳定与安全。在微隔离的架构下,传统的内、外网概念已然不再适用。相反,数据中心网络被精细地隔离为众多微小的计算单元,我们称之为节点。

转 Android SurfaceFlinger中的SharedClient -- 客户端(Surface)和服务端(Layer)之间的显示缓冲区管_android getpagestacksize()-程序员宅基地

文章浏览阅读1k次。SurfaceFlinger在系统启动阶段作为系统服务被加载。应用程序中的每个窗口,对应本地代码中的Surface,而Surface又对应于 SurfaceFlinger中的各个Layer,SurfaceFlinger的主要作用是为这些Layer申请内存,根据应用程序的请求管理这些 Layer显示、隐藏、重画等操作,最终由SurfaceFlinger把所有的Layer组合到一起,显示到显示器上。当一个应用程序需要在一个 Surface上进行画图操作时,首先要拿到这个Surface在内存中的起始地_android getpagestacksize()

Android MVVM示例项目_android mvvm实例-程序员宅基地

文章浏览阅读472次。业务组件的基础,所有业务组件必须基于该组件进行开发,提供一站式开发。_android mvvm实例

FM收音机入门,以及Python实现FM调制解调_广播信号经过解调后的波形-程序员宅基地

文章浏览阅读5.3k次。FM收音机入门FM收音机基础知识FM的调制和解调FM收音机基础知识调制分为三种:调幅(AM),调频(FM)和调相。收音机的全部频率是指包含短波、中波、长波、航空和调频波段,全部频率从100hz-2.4ghzSW是短波,在10~100米(公尺)之间。中波(MW)介于200-600米(公尺)之间,150KHz-284KHz之间的叫长波数值就表示电磁波的频率。FM中国为87-108MHz、..._广播信号经过解调后的波形