一起来学Shell脚本编程(四)

一起来学Shell脚本编程(四)

前言

目前正在出一个Shell脚本编程系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~

前面我们学习了Linux的一些基本命令,需要我们在终端手动去执行,但在处理一些复杂的操作就显得有点乏力,需要不停的执行,还很容易出错。有没有一种办法,可以帮助我们执行这一些列操作,方法当然有,那就是通过脚本去解决。

作为服务端开发,shell脚本编程还是要掌握一下的,可以做做基础性的运维,提高工作效率。

本系列主要以Linux Bash为主 ,好了, 废话不多说直接开整吧~

字符串

Shell中最常用的就是字符串数字,字符串可使用单引号也可以使用双引号,主要区别:

  • 双引号里可以有变量,单引号则原样输出
  • 双引号里可以出现转义字符,单引号则原样输出
  • 单引号字串中不能出现单引号,而双引可以

字符串拼接

bash 复制代码
#!/bin/bash

a='hello'
b='world'


echo $a $b

结果输出:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./str.sh
hello world
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

长度获取

bash 复制代码
#!/bin/bash/
a='hello world'

echo ${#a}

结果输出:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./str.sh
11
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

字符串截取

bash 复制代码
#!/bin/bash

a='hello world'

echo ${a:1} # 从第1个截取到末尾

echo ${a:1:3} # 从第一个位置开始截取3个

echo ${a:0} # 截取全部
 
echo ${a:-2} # 负数无效 相当于从第0个开始

输出:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./str.sh
ello world
ell
hello world
hello world
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

字符串表达式

给大家介绍一些常用的,我们直接看例子:

  • substr: 字符串截取
bash 复制代码
#!/bin/bash

a=`expr substr 'hello world' 1 2`

echo $a

结果输出:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./str.sh
he
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 
  • match 字符串匹配的长度
bash 复制代码
expr match "hello world" "h.*"

输出:

shell 复制代码
11
  • index: 字符串首次出现的位置
bash 复制代码
expr index "hello world" "wo"

输出:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./str.sh
5
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 
  • length: 字符串长度
bash 复制代码
echo length "hello world"

输出:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./str.sh
11
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

数组

bash支持一维数组(不支持多维数组),大小不限制

语法,可以如下定义:

bash 复制代码
# 1
array=(value1 value2 ... )

# 2
array=(
    value0
    value1
    value2
    value3
)

# 3
array[0]=value0
array[1]=value1
array[2]=value2

读取数组:

bash 复制代码
#!/bin/bash

arr=(1 2 3 4 5)

echo ${arr[1]} # 读取下标为1的元素
echo ${arr[*]} # 获取所有元素
echo ${arr[@]}  # 获取所有元素

输出:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./arr.sh
2
1 2 3 4 5
1 2 3 4 5
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

获取数组长度:

bash 复制代码
#!/bin/bash

arr=(1 2 3 4 5)

echo ${#arr[1]}  # 获取元素下标为1的长度
echo ${#arr[*]} # 获取所有元素的长度
echo ${#arr[@]} # 获取所有元素的长度

输出:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./arr.sh
1
5
5
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

结束语

大家平时在工作的时候就可以灵活运用起来了,多用用就熟悉了,大部分项目中都会用到脚本帮助我们去做一些自动化的工作,从而提高效率,还不容易出错~

本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注鼓励一下呗~

Shell脚本编程相关文章

往期Linux相关文章

往期面试题相关文章

项目源码(源码已更新 欢迎star⭐️)

往期设计模式相关文章

设计模式项目源码(源码已更新 欢迎star⭐️)

Kafka 专题学习

项目源码(源码已更新 欢迎star⭐️)

ElasticSearch 专题学习

项目源码(源码已更新 欢迎star⭐️)

往期并发编程内容推荐

推荐 SpringBoot & SpringCloud (源码已更新 欢迎star⭐️)

博客(阅读体验较佳)

相关推荐
张小洛几秒前
Spring IOC容器核心阶段解密:★Bean实例化全流程深度剖析★
java·后端·spring·ioc容器·bean实例化
小王子10244 分钟前
Django+DRF 实战:从异常捕获到自定义错误信息
后端·django·web开发
hdsoft_huge26 分钟前
Spring Boot 高并发框架实现方案:数字城市的奇妙之旅
java·spring boot·后端
00后程序员1 小时前
WebView 无法调用原生分享功能?调试复现与异常排查全过程
后端
struggleupwards1 小时前
go-cache 单机缓存
后端
struggleupwards1 小时前
golang 实现删除切片特定下标元素的方法
后端
真夜1 小时前
go开发个人博客项目遇到的问题记录
后端·go
何双新1 小时前
第 1 课:Flask 简介与环境配置(Markdown 教案)
后端·python·flask
于顾而言1 小时前
【开源品鉴】FRP源码阅读
后端·网络协议·开源
深栈解码1 小时前
JUC并发编程 synchronized与锁升级
java·后端