首页 > 系统相关 >Linux shell编程学习笔记8:使用字符串

Linux shell编程学习笔记8:使用字符串

时间:2023-10-19 12:06:43浏览次数:45  
标签:shell expr 编程 echo host user Linux 字符串 alpha


一、前言

字符串是大多数编程语言中最常用最有用的数据类型,这在Linux shell编程中也不例外。

本文讨论了Linux Shell编程中的字符串的三种定义方式的差别,以及字符串拼接、取字符串长度、提取字符串、查找子字符串等常用字符串操作,,以及反引号在echo 和 expr命令联合使用时的作用。

二、定义字符串

Linux Shell编程中的字符串可以用单引号,也可以用双引号,如果不包含空格,也可以不用引号。

(一)无引号字符串

实例:

user@host: ~ # var1=abc123

user@host: ~ # echo $var1

abc123

user@host: ~ #

Linux shell编程学习笔记8:使用字符串_字符串定义

变量var1的值abc123中不包括变格,因此在赋值可以不用引号。

(二)单引号字符串
 

单引号里的任何字符都会原样输出,变量在单引号字符串中无效,即使在变量名前加上$字符,变量仍不会被识别。

单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

实例1:单引号字符串中变量无效

user@host: ~ # alpha='abcd"

user@host: ~ # echo $alpha

abcd

user@host: ~ # echo '$alpha123'

$alpha123

user@host: ~ # echo 'alpha123'

alpha123

user@host: ~ # 

Linux shell编程学习笔记8:使用字符串_命令行提示符_02

实例2:单引号字符串拼接

user@host : ~ # alpha='abcd'
user@host : ~ # echo $alpha 
abcd
user@host : ~ # echo '< '$alpha'>'
<abcd>
user@host : ~ # echo '<'${alpha}'>'
<abcd>
user@host : ~ # echo '<${alpha}> '
<${alpha}>
user@host : ~ # echo '<$alpha>'
<$alpha>
user@host : ~ # echo '<''>'
<>
user@host : ~ # 

Linux shell编程学习笔记8:使用字符串_学习笔记_03

(三)双引号字符串

在被双引号括起来的字符中,"$"、"\"和反引号是拥有特殊含义的,"$"代表引用变量的值,而反引号代表引用命令。

所以,双引号里可以有变量,可以出现转义字符。

实例1:双引号中的变量会被识别

user@host : ~ # alpha=“abcd”
user@host : ~ # echo $alpha 
abcd
user@host : ~ # echo "\$alpha=$alpha"
$alpha = abcd
user@host : ~ # echo "\$alpha = \"${alpha}\""
$alpha = "abcd"
user@host : ~ # 

Linux shell编程学习笔记8:使用字符串_shell编程_04

在上面的实例中,输出$、双引号等需要使用转义字符,即在符号前加上\。

 

实例2:双引号拼接字符串

user@host : ~ # alpha='abcd'
user@host : ~ # echo $alpha 
abcd
user@host : ~ # echo "<""$alpha "">"
<abcd>
user@host : ~ # echo "<""${alpha} "">"
<abcd>

user@host : ~ #

Linux shell编程学习笔记8:使用字符串_命令行提示符_05

三、取字符串长度

  (一)格式

 格式:${#string}

(二)实例:

user@host : ~ # alpha='abcd'
user@host : ~ # echo ${#alpha} 
4

user@host : ~ # echo ${#alpha[0]} 

-sh: syntax error: bad substitution

user@host : ~ #

Linux shell编程学习笔记8:使用字符串_shell编程_06

网上有资料称:变量为字符串时,${#string} 等价于 ${#string[0]}。但在sh中测试无效。

四、提取子字符串

(一)格式

格式:${#string:n:m}

说明:n-起始字符索引值,字符串首字符索引值为0

           m-子串长度

(二)实例

user@host : ~ # alpha='abcd'
user@host : ~ # echo ${#alpha:0:2} 
ab

user@host : ~ # echo ${#alpha:0:8} 

abcd

user@host : ~ #

Linux shell编程学习笔记8:使用字符串_linux_07

其中命令 echo ${#alpha:0:2}   是从首字符开始提取2个字符,结果是:ab

其中命令  echo ${#alpha:0:8}  是从首字符开始提取8个字符,结果是:abcd

从上例可知,如指定的子串长度超过母串长度,则截取至母串末。

五、查找子字符串

(一)格式

格式:expr index string substring

说明:

expr       :是UNIX/LINUX下的一个手工命令行计数器,用于计算表达式变量的值,一般用于整数值,也可用于字符串。

index      :表示要进行索引操作

string      :待查找的字符串

substring:要查找的子字符串

(二)实例

user@host : ~ # alpha='abcd'
user@host : ~ # expr index $alpha bc

2

user@host : ~ # echo 'expr index ${alpha} bc'

expr index ${alpha} bc

user@host : ~ # echo `expr index ${alpha} bc`

2

user@host : ~ #

Linux shell编程学习笔记8:使用字符串_linux_08

d

在上例中,我们可以在命令行中使用命令 expr index $alpha bc 查找子字符串 ab 在字符串变量alpha值中的位置

如果要与echo命令配合使用的话,不能使用单引号,而需要使用反引号。

在命令 echo 'expr index ${alpha} bc' 中,  使用的是单引号,expr index ${alpha} bc 被当成字符串直接输出,所以命令执行结果是:expr index ${alpha} bc

在命令 echo `expr index ${alpha} bc` 中,使用的是反引号,expr index ${alpha} bc作为命令执行,所以命令执行结果是:2

标签:shell,expr,编程,echo,host,user,Linux,字符串,alpha
From: https://blog.51cto.com/endurer/7934056

相关文章

  • Linux shell编程学习笔记4:修改命令行提示符格式(内容和颜色)
    一、命令行提示符格式内容因shell类型而异Linux终端命令行提示符内容格式则因shell的类型而异,例如CoreLinux默认的shell是sh,其命令行提示符为黑底白字,内容为:tc@box:/$其中,tc为当前用户名,box为主机名,/为当前目录路径,$表示当前用户类型是普通用户 。 二、环境变量PS1存储了命令行提......
  • Linux账号密码安全策略设置
    前言随着云计算厂商的兴起,云资源如ECS不再只有企业或者公司才会使用,普通人也可以自己买一台ECS来搭建自己的应用或者网站。虽然云计算厂商帮我们做了很多安全相关的工作,但并不代表我们的机器资源就绝对是安全的。要知道有很多事情是云计算厂商不能为我们做的,就比如账号密码的安全......
  • Linux I/O schedulers类型简介
    I/Oschedulersattempttoimprovethroughputbyreorderingrequestaccessintoalinearorderbasedonthelogicaladdressesofthedataandtryingtogroupthesetogether.WhilethismayincreaseoverallthroughputitmayleadtosomeI/Orequestswaitin......
  • Linux的Namespace,cgroup,chroot和docker的本质
    Linux的Namespace,cgroup,chroot和docker的本质-陈映峤的博客|LerkoBlog(chenyingqiao.github.io)chroot,即changerootdirectory(更改root目录)。在linux系统中,系统默认的目录结构都是以 /,即是以根(root)开始的。而在使用chroot之后,系统的目录结构将以指定的位......
  • Linux-expect(以交互形式输入命令,实现交互通信)
    1.expect简介expect是一种脚本语言,它能够代替人工实现与终端的交互,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。安装命令:yuminstallexpect; 2.expect使用场景(1)并根据预定标准回答其问题,回答“是”、“否”或将控制权交还给您(2)远程连接设备......
  • Linux-shell脚本使用ssh远程执行命令通过密码的方式登录
    1. sshpass简介sshpass是一个在非交互式ssh会话中自动输入密码的工具。它可以直接在命令行中指定密码,因此可以用于Shell脚本等自动化场景。在RedHat系统中,可以通过epel-release源安装sshpass。epel-release源是ExtraPackagesforEnterpriseLinux(EPEL)的缩写......
  • Linux-Shell 小数运算,四舍五入
    在shell中做小数运算,可以借助bc或者awk工具一、使用bc做小数运算,scale指定小数点位数1、加法运算(scale参数无效)#echo"5.999+5.001"|bc6.000#echo"5.111+5.1114"|bc10.2224运算结果小数点位数以加数中最大的为准 2、减法运算(scale参数无效)  同加法运算  运算......
  • 配置自定义服务为linux系统服务
    背景使用go语言写了一个测试环境部署上报的备份服务,以防因为主服务挂了影响部署操作。 想把这个backup服务设置了系统服务,如果因环境重启等异常,可以自动重启使用的环境的Centos71、首先需要创建一个systemdunit存储配置文件[Unit]Description=deployreportbackupse......
  • linux应急处置
    实战手把手教你,Linux服务器应急处置教学小编 CyberTorres 2023-10-0914:48 发表于广东收录于合集#linux1个#服务器1个#技术分享2个当你负责的服务器被黑了,怎么办?没遭遇过如此大风大浪的运维人员:哦,**!我该怎么办,点根香烟冷静一下。Wait!小编请您先切断网络,再......
  • 你是否还迷茫要不要学习Linux?
    近几年Linux这个词好像很流行,无论是现实工作中,还是在网络信息中均可以听到或者看到有关Linux相关的内容,可以说Linux无处不在。说到这,有人可能会问了,我对Linux比较感兴趣,但是没有接触过Linux,对它不了解,不知道是否适合自己,是否值得我花费时间和经历去深入学习,因此陷入一种比较迷茫的......