Shell 脚本中判断字符串非空_LiLittleCat的博客-程序员秘密_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

智能推荐

Apache Tomcat Version 8.5.54 Release Notes_咔啡的博客-程序员秘密

================================================================================Licensed to the Apache Software Foundation (ASF) under one or morecontributor license agreements. See the NOTICE file...

Android 架构组件设计思想总结_feelang的博客-程序员秘密_android架构思想

原文地址:https://mp.weixin.qq.com/s/-2z7lAGQ3GeSqFfkPGPWNA转载已获授权Google 为帮助 Android 开发者更快更好地开发 App,推出了一系列组件,这些组件被打包成一个整体,叫作 Android Jetpack,其包含的组件如下图所示:旧 support 包也被整合进了 Jetpack,例如上图 Foundation 模块的 ...

iptables防火墙规则操作_peidongyao的博客-程序员秘密

一、查看防火墙规则iptables -L -n 或者iptables -nvl二、配置默认规则iptables -P INPUT DROP   不允许进iptables -P FORWARD DROP  不允许转发iptables -P OUTUPT ACCEPT  允许出三、增加规则iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT//允许源ip地址为19...

三分钟,让你弄清楚Python中函数的括号使用_lamehd的博客-程序员秘密_python 函數 括號

一直以来对python中函数括号的使用,有点分不清楚,到底什么时候用括号,什么时候不用括号,造成了很大困惑。执行结果:根据结果来分析:1、 x = aaa aaa是一个类名,后面没加括号,打印结果 ,表明x是个类2、 由于没有加括号,类没有实例化,y为公有属性,因此x.y打印的结果为you3、foo为aaa类中的函数,称为方法或属性,同时 foo后面也未加括号,打印...

下划线 动画_Just do it的博客-程序员秘密

<ul class="ddd"> <li class="solid active">啦啦啦啦</li> <li class="solid">我哦我我</li> <li class="solid">哦哦哦哦</li> <li class="solid">噢噢噢噢</li> ...

java设计模式之——策略模式_lvwenwenjava的博客-程序员秘密

java设计模式之——策略模式1,什么是策略模式?策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。2,策略模式有什么好处?     策略模式的好处在于你可以动态的改变对象的行为。3,设计原则       设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++z中可以用虚类),然后在类中包含这个对象的实例,这样...

随便推点

高中数学思维导图_正统之独孤求败的博客-程序员秘密

高中数学三年最全、最新、最清晰的思维导图 涵盖高中数学三年所有知识要点集合▼不等式▼函数▼三角函数▼解三角形▼数列▼空间向量与立体几何▼直线方程▼圆的方程▼圆锥曲线▼复数▼简单几何体▼二项式定理▼ 概率与统计...

Android listView的展开与收起实现折叠,及动态设置子ListView的高度_tsaopin的博客-程序员秘密_android listview折叠

问题重现最近在公司项目中做一个商品展示的功能,要求在分类后 ,对每个类进行展开、收起操作。想法就是在ListView中嵌套一个ListView,通过动态的显示和隐藏ListView,实现展开和收起操作在同一个页面,实现折叠效果。难点:解决ListView的动态设置问题.先看效果图: 解决思路外面一层是一个ListView,在填充Item的时候,在Item布局设置为LinearLayout,在下面设

Hbuilder 选择chorme打开网页时没有反应,_Young_Gao的博客-程序员秘密

我的hbuilder版本是     HBuilder 9.0.2.201803061935点击工具栏的运行,找到运行配置找到chorme   右边再选择 google chorme就可以了 2018-03-26 补充:还有一种情况,最开始你无法打开chrome,然后你按照提示自己设置了一个chrome的路径,最后发现点击chrome图标还是没有用,然后你后来重装...

Unicode 与 UTF-8_weixin_33725239的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准>>> ...

python实现蒙特卡洛模拟_随机模拟——蒙特卡洛算法及Python实现_weixin_39808143的博客-程序员秘密

随机模拟——蒙特卡洛算法及Python实现irony•2020 年 04 月 24 日蒙特卡洛算法介绍蒙特卡洛算法(Monte Carlo method)也称统计模拟算法,是一种以概率统计理论为指导的数值计算方法方法。是指使用随机数来解决很多计算问题的方法。蒙特卡洛方法基本思想通常蒙特卡洛算法可以分为两种:1,一种是所求解的问题本身具有内在随机性,借助计算机的运算能力可以直接模拟这种随机的过程...

推荐文章

热门文章

相关标签