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

news2024/11/26 15:41:05

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 ]; then
       echo "-z $s1 ==0"
else
      echo "-z $s1 !=0"
fi

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

-z ab !=0

 第二个命令序列是

s1=""
if [ -z $s1 ]; then
       echo "-z $s1 ==0"
else
      echo "-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 ]; then
  echo "$s1 != null"
else
 echo "$s1 == null"
fi

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

ab != null

 第二个命令序列是

s1=""
if [ $s1]
then
    echo "$s1 != null"
else
    echo "$s1 == null"
fi

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

 == null

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx+HTTPS证书

申请ssl下载证书 阿里云购买免费证书,可免费申请20个,需要配置域名,域名为单个域名,比如www.xxx.com,必须带前缀。 申请完之后需要创建证书 注:创建证书时阿里云购买的域名可以直接给配好解析&#xff0…

【网络】UDP和TCP套接字编程

目录 一、初始ip地址和port二、网络字节序三、socket编程1、sockaddr结构2、socket编程接口2.1、创建 socket接口2.2、绑定端口号2.3、监听socket2.4、接收请求2.5、建立连接2.6、收消息2.7、发消息 3、UDP套接字编程 -- 现实大小写转换4、TCP套接字编程 -- 原生多线程现实TCP通…

Flutter - 底部多选弹框组件

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新,请前往github查看最新代码 有时需要弹框选择多个数据,因此写了个底部多选弹框组件 支持搜索,设置默认选中数据,暗黑模式适配 效果图 使用方法 final multiD…

基于FPGA的图像缩小算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的处理结果导出到matlab中显示图像效果: 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1p…

mysql8压缩包安装

MySQL 8.0 版压缩包安装教程_mysql 压缩包 8.0安装-CSDN博客 1、mysql压缩包 2、参考链接一步一步操作即可。 3、安装,破解navicat. 4、无法连接,参考该链接修改: Mysql 解决1251- Client does not support authentication protocol reques…

易云维®IBMS系统实现了医院楼宇建筑内各专业子系统间的相互操作、快速响应、与联动控制

易云维医院楼宇智能化管理系统(IBMS系统)可以通过调研医院项目现场情况,了解用户的实际需求,为用户提供合理投资、高效、舒适、方便的环境空间;对医院建筑多个弱电子系统进行集中监控,确保各个弱电子系统安…

【C进阶】字符串函数

C语言中对字符和字符串的处理很频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中 字符串常量适用于那些对它不做修改的字符串函数 本章重点介绍处理字符串函数的库函数的使用和注意事项 一、字符串函数 这些函数都要引…

C语言之动态内存管理_柔性数组篇(2)

目录 柔性数组的特点 柔性数组的使用 动态内存函数增容柔性数组模拟实现 柔性数组的优势 今天接着来讲解一下柔性数组知识。 柔性数组的特点 C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做【柔性数组】成员。 结构体中最后一个成员未…

PyCharm搭建Scrapy环境

Scrapy入门 1、Scrapy概述2、PyCharm搭建Scrapy环境3、Scrapy使用四部曲4、Scrapy入门案例4.1、明确目标4.2、制作爬虫4.3、存储数据4.4、运行爬虫 1、Scrapy概述 Scrapy是一个由Python语言开发的适用爬取网站数据、提取结构性数据的Web应用程序框架。主要用于数据挖掘、信息处…

k8spod就绪检查失败

pod 一直未就绪 kube-system metrics-server-7764f6c67c-2kts9 0/1 Running 0 10m kubect describe 查看 就绪探针未通过 Normal Started 3m19s kubelet Started container metrics-server Warning Unhealthy 5s (x20 over 2m55s) kubelet Readiness probe failed: HTTP probe…

Springboot整合Hutool自定义注解实现数据脱敏

一、前言 我们在项目中会处理敏感数据(如手机号、身份证号、姓名、地址等)时,通常需要对这些数据进行脱敏,以确保数据隐私和安全。 我们本次使用 Hutool 库来轻松实现数据脱敏,如果项目中不让使用,可以自…

各类高危漏洞介绍及验证方式教程(二)

本期整理的漏洞验证教程约包含50多类漏洞,分多个章节编写,可从以下链接获取全文: 各类高危漏洞验证方式.docx (访问密码: 1455) 搭建dvwa测试环境基础教程.docx(访问密码: 1455) web逻辑漏洞挖掘快速入门基础教程.docx (访问密码: 1455) 06 I…

工作杂记-YUV的dump和read

工作小记-YUV的dump和read 工作杂记-YUV的dump和read利用dump生成图片 yuv2imgyuv2img代码 工作杂记-YUV的dump和read 工作中涉及到模型验证相关的工作,这里是三个模型的共同作用,在感知模型读取图片的时候,把输入替换成自己给定的输入&…

Python中如何快速解析JSON对象数组

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 由于浏览器可以迅速地解析JSON对象,它们有助于在客户端和服务器之间传输数据。 本文将描述如何使用Python的JSON模块来传输和接收JSON数据。 JavaSc…

优思学院|揭秘六西格玛:七大迷思你不可不知!

六西格玛的核心理念起源于1970年在摩托罗拉公司诞生。其基本精神一直是持续改进和提升品质,随后在各国呈爆炸性的发展。自2000年开始引进中国后,已经过了约16年的应用。但以2017年的角度回顾中国整体六西格玛的应用广度及熟悉度,发现六西格玛…

【ftp篇】 vsftp(ftp) 每天生成一个动态密码

这里写目录标题 前言为什么需要动态每日生成一个密码?编写脚本定时任务java对应的代码 前言 社长最近接到一个需求,需要ftp每天动态生成一个密码 为什么需要动态每日生成一个密码? 在软硬件通讯过程中,就以共享单车为例&#xff0…

Java解析E文件工具类

import lombok.extern.slf4j.Slf4j;import java.io.*; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List;/*** Description E文件工具类*/ Slf4j public class EFileUtils {/*** 读字符串* param text …

智慧公厕的原理与优势,了解一种更智能的卫生设施

智慧公厕是一种基于现代科技的智能化卫生设施,它的出现给人们的生活带来了巨大的改变和便利。本文将详细介绍智慧公厕的原理和优势,让我们一起了解一种更智能的卫生设施。 智慧公厕的原理主要基于物联网技术。通过将公厕内部各种设备和设施连接到互联网…

Java使用Hutool工具包将汉字转换成汉语拼音

主题:使用Java将汉字转换成拼音 介绍 在Java开发中,有时候我们需要将汉字转换成拼音,以方便进行数据处理、搜索和排序等操作。本文将介绍如何使用Hutool和Pinyin4j这两个Java库来实现汉字转拼音的功能。 依赖库介绍 在开始之前,…

无人直播矩阵系统源码开发------

全自动无人直播系统是一款让商家和企业实现无人直播的系统软件,让商家在门店直播卖货,实现解放双手,无需过多的人工干预。为了满足不同用户的需求,我们推出了OEM功能,让用户可以轻松地将该系统集成到自己的应用程序中。…