Linux shell编程学习笔记9:字符串运算 和 if语句

Linux Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、字符串、文件测试等多种运算,同样也需要进行根据条件进行流程控制,提供了if、for、while、until等语句。 

上期学习笔记中我们研究了字符串数据的使用,今天我们研究字符串运算,为了应用实例进行讲解,我们同时研究了进行判断的时候经常使用的if语句。

一、常用字符串运算符

运算符说明
=检测两个字符串是否相等,相等返回 0(true),否则返回1(false)。
!=检测两个字符串是否不相等,不相等返回 0(true),否则返回1(false)。
-z检测字符串长度是否为0,为0返回 0(true),否则返回1(false)。
-n检测字符串长度是否不为 0,不为 0 返回 0(true),否则返回1(false)。
$检测字符串是否不为空,不为空返回0(true),否则返回1(false)。

二、if语句

与C、C++、Pascal等其它编程语言相似,在 Linux Shell 编程中,同样需要进行根据条件进行流程控制,也提供了if、for、while、until等语句。

因为我们在下面进行字符串运算的实例讲解时需要使用流程控制来演示,所以今天我们先看看在进行判断的时候经常使用的if语句。

Linux  Shell 脚本编程中 使用的 if 语句形式 与C、C++、Pascal等语言中还是较大差别的。

Linux  Shell 脚本编程中 if 语句主要有以下几种形式和组合。

(一) if - then -fi 语句

if [condition]
then符合 condition 的执行语句
fi

(二) if -then-else-fi 语句

if [condition]
then符合 condition 的执行语句
else不符合 condition 的执行语句
fi

写起来是不是感觉有点麻烦?

所以Linux  Shell 脚本编程中还提供了两种简写格式

(三) if ;- then -fi 语句

也就是将 then 与 if 写在同一行,这时]后面需要添加分号,例如:

if [condition]; then符合 condition 的执行语句
fi

(四)if -then-elif-then-fi 语句

将 else if 简写为 elif,elif 后面也要有 then来配对,如下所示:

if [condition1]
then符合 condition1 的执行语句
elif [condition2]
then符合 condition2 的执行语句
else 不符合 condition1 和 condition2 的执行语句
fi

或者

if [condition1]
then符合 condition1 的执行语句
elif [condition2]; then符合 condition2 的执行语句
else 不符合 condition1 和 condition2 的执行语句
fi

请注意两点:

1.结尾是将 if 倒过来写 fi 作为结束标志,而不是endif。

2.condition(条件表达式)要放在方括号之间,并且运算符和运算对象之间要有空格分隔。

例如, [$a=$b] 这种写法是错误的,因为$a=$b是赋值语句,

要进行比较必须写成 [ $a = $b ]。   

网上有些教程说: 条件表达式要放在方括号之间,并且要有空格间隔,即 [$s1] 要写为 [ $s1 ]。

但在下面第三部分的实例中,我们写为 [ $s1] ,仍能执行并获得正确的结果。。

三、字符串操作实例

(一)字符串是否相等

user @host: ~ $s1='ab'
user @host: ~ $s2='cd'
user @host: ~ $s3='ab'
user @host: ~ $r=`expr $s1 = $s2`
user @host: ~ $echo $r
0
user @host: ~ $r=`expr $s1 = $s3`
user @host: ~ $echo $r
1
user @host: ~ $

注意:上面的命令中使用的反引号,不是单引号

从上例中,我们可以看到:

由于变量s1和s2不相等,所以$s1 = $s2 的比较结果是0。

由于变量s1和s3相等,所以$s1 = $s3 的 比较结果是1。

(二)字符串是否不相等

user @host: ~ $s1='ab'
user @host: ~ $s2='cd'
user @host: ~ $s3='ab'

user @host: ~ $r=`expr $s1 != $s2`
user @host: ~ $echo $r
1
user @host: ~ $r=`expr $s1 != $s3`
user @host: ~ $echo $r
0
user @host: ~ $

注意:上面的命令中使用的反引号,不是单引号

从这个实例中,我们可以看到:

由于变量s1和s2不相等,所以$s1 != $s2 的比较结果是1。

由于变量s1和s3相等,所以$s1 != $s3 的比较结果是0。

字符串是否不相等 实例的比较结果跟前面字符串是否相等 的实例中正好相反。

(三)检测字符串长度是否为0

user @ host: ~ $ s1="ab"
user @ host: ~ $ if [ -z $s1 ]; then
echo "-z $s1 ==0"
else
echo "-z $s1 !=0"
fi
-z ab !=0
user @ host: ~ $ s1=""
user @ host: ~ $ if [ -z $s1 ]; then 
echo "-z $s1 == 0"
else
echo "-z $s1 != 0"
fi
-z  == 0
user @ host: ~ $ 

由于我们还没有研究到脚本文件,在上面的实例中,我们是通过命令行输入了两个命令序列,

第一个命令序列是

s1="ab"
if [ -z $s1 ]; thenecho "-z $s1 ==0"
elseecho "-z $s1 !=0"
fi

由于s1="ab",它的长度是2,所以执行结果为:

-z ab !=0

 第二个命令序列是

s1=""
if [ -z $s1 ]; thenecho "-z $s1 ==0"
elseecho "-z $s1 !=0"
fi

由于s1="",它的长度是0,所以执行结果为:

-z  == 0

(四)检测字符串长度是否不为0

 把上面两段命令序列中的 -z $s1 改为 -n $s1,那么执行的结果就是下面这样的:

user @ host: ~ $ s1="ab"
user @ host: ~ $ if [ -n $s1 ]
> then
>    echo "-n $s1 == 0"
else
>    echo "-n $s1 != 0"
fi
-n ab == 0
user @ host: ~ $ s1=""
user @ host: ~ $ if [ -n $s1 ]
> then
>    echo "-n $s1 == 0"
> else
>    echo "-n $s1 != 0"
> fi
-n  == 0
user @ host: ~ $ 

(五)检测字符串是否不为空

user @ host: ~ $ s1="ab"
user @ host: ~ $ if [ $s1 ]; then
echo "$s1 != null"
else
echo "$s1 == null"
fi
ab != null
user @ host: ~ $ s1=""
user @ host: ~ $ if [ $s1]
then
   echo "$s1 != null"
else
>    echo "$s1 == null"
fi
 == null
user @ host: ~ $ 

 在上面的实例中,我们是通过命令行输入了两个命令序列,

第一个命令序列是

s1="ab"
if [ $s1 ]; thenecho "$s1 != null"
elseecho "$s1 == null"
fi

由于s1="ab",其值不为空,所以执行结果为:

ab != null

 第二个命令序列是

s1=""
if [ $s1]
thenecho "$s1 != null"
elseecho "$s1 == null"
fi

由于s1="",其值为空,所以执行结果为:

 == null

第二个命令序列中的 if语句我们写成了 if [ $s1],仍能执行并获得正确的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/129812.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LongLoRA:超长上下文,大语言模型高效微调方法

麻省理工学院和香港中文大学联合发布了LongLoRA,这是一种全新的微调方法,可以增强大语言模型的上下文能力,而无需消耗大量算力资源。 通常,想增加大语言模型的上下文处理能力,需要更多的算力支持。例如,将…

前后端分离计算机毕设项目之基于SpringBoot的旅游网站的设计与实现《内含源码+文档+部署教程》

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

k8s修改集群IP--不重置集群

正常在用集群想要更换ip master 节点ip192.168.10.138 改为192.168.10.148 node1节点ip192.168.10.139 改为192.168.10.149 node2节点ip192.168.10.140 改为192.168.10.150 master 节点 1)执行脚本1233.sh 1233.sh 内容如下: # master 节点 export oldip1192.168.…

excel单元格合并策略

excel单元格合并策略 证明112? 要证明112这个问题,首先我们要找到问题的关键。所谓问题的关键呢,就是关键的问题,那么如何找到问题的关键就是这个问题的关键。 比如说,你有一个苹果,我也有一个苹果&#x…

小谈设计模式(24)—命令模式

小谈设计模式(24)—命令模式 专栏介绍专栏地址专栏介绍 命令模式角色分析命令(Command)具体命令(ConcreteCommand)接收者(Receiver)调用者(Invoker)客户端&am…

华为云云耀云服务器L实例评测|使用redis事务和lua脚本

文章目录 云服务器的类型云服务优点redis一,关系型数据库(sqlserver,mysql,oracle)的事务隔离机制说明:redis事务机制 lualua脚本好处:一,怎么在redis中使用lua脚本二,脚…

基于安卓android微信小程序宠物交易小程序

运行环境 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 小程序框架&…

【RabbitMQ】docker rabbitmq集群 docker搭建rabbitmq集群

docker rabbitmq集群 docker搭建rabbitmq集群 RabbitMQ提供了两种常用的集群模式 1.普通集群模式 2.镜像集群模式 普通集群模式只能同步主节点上的交换机和队列信息,但对于队列中的消息不做同步,主节点宕机也不能进行切换(故障转移&#xff…

新增TOP!10月SCI/SSCI/EI刊源表已更新!

2023年10月SCI/SSCI/EI期刊目录更新 2023年10月份刊源表已更新!计算机领域新增TOP期刊、SSCI、EI新增多本好刊,重点期刊如下,相关领域作者注意投稿截止时间! 01 计算机领域 02 医学与制药领域 03 工程综合领域 04 环境生物化学地…

区块链技术在金融领域的应用场景

区块链技术在金融领域具有广泛的应用场景,它可以提供更安全、透明、高效和可信的金融服务。以下是一些区块链金融的主要应用场景,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.数字货币…

SpringBoot 如何配置 OAuth2 认证

在Spring Boot中配置OAuth2认证 OAuth2是一种用于授权的开放标准,允许应用程序安全地访问用户的资源。Spring Boot提供了强大的支持,使得在应用程序中配置OAuth2认证变得非常容易。本文将介绍如何在Spring Boot中配置OAuth2认证,以便您可以在…

光伏发电预测(GRU模型,Python代码)

运行效果:光伏发电预测(GRU模型,Python代码)_哔哩哔哩_bilibili 所有库的版本: 1.数据集(连续10年不间断采集三个光伏电站的发电量及天气情况,每隔半个小时采集一次信息,因此&…