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

智能推荐

ubuntu18.04安装显卡驱动和CUDA9.0_ubu.tu cudatoolkit ppa源-程序员宅基地

文章浏览阅读2k次。1、硬件与软件版本显卡:GeForce GTX 750系统:Ubuntu 18.04cuda:9.0版本cuDNN:cuDnn v72、英伟达显卡安装(.run方式安装容易出错,我使用的是ppa源方式安装。)2.1删除旧的驱动Linux默认安装的驱动不是英伟达的驱动,所以先把旧的驱动删除。# 删除sudo apt-get purge nvidia*2.2禁止..._ubu.tu cudatoolkit ppa源

Postman设置全局变量token,自动更新token,统一设置headers(Authorization)_postman 登录后更新header-程序员宅基地

文章浏览阅读4.4k次,点赞4次,收藏19次。1.设置Globals 找到小眼睛 点击 选择Globals 点击Edit 全局变量这里token要和下面的代码key值一直。2.postman 获取token 接口中设置 执行下面代码 如图pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); var data = JSON.parse(responseBody); // 把responseBody转为json字_postman 登录后更新header

SpringBoot项目实战总结_创建springboot项目实验总结-程序员宅基地

文章浏览阅读2.3k次。1.项目信息项目模板地址项目结构项目运行2.特殊功能与实现日志记录功能单点登录问题Redis Session问题消息管理模块意见反馈模块登录失败锁定功能初始化时接口定义问题验证码登录问题词典问题和词典列表展示安装部署maven打包脚本启动基础环境配置为开机启动..._创建springboot项目实验总结

大麦路由器刷无线打印服务器,极路由2 大麦22D/203/204刷OPENWRT实现NDR客户端拨号 开机自启动 内网无法访问...-程序员宅基地

文章浏览阅读5.8k次。极路由2 大麦22D/203/204刷OPENWRT实现NDR客户端拨号 开机自启动 内网无法访问时间:2020-11-30 17:28:09 / 来源:你好多多DIY / 作者:多多基于极路由HC5761版本(7620A芯片),大麦22D-203W204同样适用极路由2的固件,刷OPENWRT实现NDR客户端拨号 开机自启动 内网无法访问。基于极路由HC5761版本(7620A芯片),大麦22D..._大麦22d刷机

前端笔记(关于webpack打包时内存溢出问题的解决)_前端打包 内存溢出导致打包时间过长处理-程序员宅基地

文章浏览阅读1.6k次。首先安装increase-memory-limitcnpm install -g increase-memory-limit重启cmd,并在项目跟目录中运行一下increase-memory-limit然后打开项目的package.json,修改scripts的内容在build运行的命令后面扩展下内存,比如设为8G(足够)。node--max-old-space-size=8192然后就可以打包成功了。..._前端打包 内存溢出导致打包时间过长处理

php 数组变成url_php怎么将数组转为url参数?-程序员宅基地

文章浏览阅读1.4k次。在PHP中,可以使用内置的“http_build_query()”函数将数组转为url参数。“http_build_query()”函数是php5加入的,作用是把数G Z s [ C } N / :组或对象转换成url参数,生成一个经过“` } d _ p e a 1URL-en= r = xcode”的请求字符串。推荐:《PHP视频教程》php使用http_build_query()函数将数组..._php 数组进行url编码

随便推点

ctf题目php文件上传如何绕过_【Web-南邮CTF】Web-CTF入门第7天-程序员宅基地

文章浏览阅读402次。【黑客笔记--7天入门南邮CTF-WEB篇】综合题直接复制到浏览器的console中执行 获得新的提示信息如下: 1bc29b36f623ba82aaf6724fd3b16718.php 咱们去访问这个新的地址获得提示信息如下:打开burp suite 再次访问 查看响应报文获得提示信息如下: Linux操作系统~目录下有.bash_history文件 根据提示咱们访问/web3/b0b0ad11..._ctf web文件上传怎么绕过文件解压

PHP实现3DES加密,加密模式MCRYPT_MODE_CBC,填充方式PKCS7 Padding,密钥不足补0-程序员宅基地

文章浏览阅读976次。为什么要对数据进行加密  数据的安全性越来越得以重视。举个例子说,保存在数据库中的用户密码并不是明文保存的,而是采用md5加密后存储,这样即使数据库被脱库,仍能保证用户密码安全。但是,md5是不可逆的,开发人员根本就不知道用户的密码到底是什么。有些时候,我们希望加密后存储的数据是可逆的,比如一些接口密钥,这样即使数据库被脱库,如果没有对应的解密方式,攻击者盗取的密钥也是不能使用的。什么是3..._php 3des

特斯拉无人驾驶最核心的人工智能算法,竟是强化学习-程序员宅基地

文章浏览阅读3.3k次。2017年,谷歌的AlphaGo再次卷土重来,完败世界第一棋手柯洁,人工智能一下子成为全球讨论的焦点,而升级版的技术——强化学习算法更是瞬间成为技术领域讨论的热点。风口已..._特斯拉自动驾驶 强化学习

python matplotlib 画图整理_matplotlib 刷新plot-程序员宅基地

文章浏览阅读734次。这里大部分参考了博主:https://blog.csdn.net/Notzuonotdied/article/details/77876080 的整理x结果## plot 板块##import matplotlib.pyplot as pltimport numpy as npx=np.linspace(1,10,10)y=xy1=2*x**2+1y2=2*x**3+1..._matplotlib 刷新plot

linux上安装python elasticsearch模块_Linux下使用yum安装ElasticSearch的方法-程序员宅基地

文章浏览阅读213次。ElasticSearch是基于Lucene这个非常成熟的索引方案,另加上一些分布式的实现:集群,sharding,replication等。以下是对其采用yum安装的方法。1.下载并安装GPG key[root@linux-node1~]#rpm--importhttps://packages.elastic.co/GPG-KEY-elasticsearch2.添加yum仓库[root@...

C/C++编程:libwebsockets(win10+vs2019)_vs libwebsockets demo-程序员宅基地

文章浏览阅读2.9k次。github uWebSockets — 12.2K使用vcpkg安装uWebSocketsvcpkg install uwebsockets:x64-windowsvs20191、创建一个cmake工程_vs libwebsockets demo