shell编程入门(三)
字符串
获取字符串的长度
#! /bin/bash
zhangsan="法外狂徒张三"
echo ${#zhangsan}
结果
ZHR:md zc$ ./test.sh
6
提取子字符串
#! /bin/bash
zhangsan="法外狂徒张三"
echo ${zhangsan:1:4}
结果
ZHR:md zc$ ./test.sh
外狂徒张
https://blog.csdn.net/u010508220/article/details/52513491
数组
支持一维数组(不支持多维数组),并且没有限定数组的大小
数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。
定义一个数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。⚠️:不是用“,”分割。
#! /bin/bash
zhangsan=(1 2 3 4 5 6 7)
lisi[0]=99
lisi[1]=88
lisi[2]=77
读取数组的某一个值
#! /bin/bash
zhangsan=(1 2 3 4 5 6 7)
lisi[0]=99
lisi[1]=88
lisi[2]=77
echo ${zhangsan[3]}
echo ${lisi[2]}
结果
ZHR:md zc$ ./test.sh
4
77
获取数组所有的元素
#! /bin/bash
zhangsan=(1 2 3 4 5 6 7)
lisi[0]=99
lisi[1]=88
lisi[2]=77
echo ${zhangsan[@]}
echo ${lisi[@]}
结果
ZHR:md zc$ ./test.sh
1 2 3 4 5 6 7
99 88 77
获取数组长度
#! /bin/bash
zhangsan=(1 2 3 4 5 6 7)
lisi[0]=99
lisi[1]=88
lisi[2]=77
echo ${#zhangsan[@]}
echo ${#lisi[@]}
结果
ZHR:md zc$ ./test.sh
7
3
数组的遍历
#! /bin/bash
zhangsan=(1 2 3 4 5 6 7)
for i in ${zhangsan[@]}
do
echo ${i}
done
结果
ZHR:md zc$ ./test.sh
1
2
3
4
5
6
7
文件包含
这个的场景就是我写好了一个脚本A,里面的东西都是公用的,我现在第二个脚本B里需要的一部分内容正好是脚本A里的,那我们是重新在B里写一遍A好还是直接引用A好
脚本A(这个脚本是可以没有执行权限的)
#! /bin/bash
add(){
echo $((${1}+${2}))
}
脚本B1
#! /bin/bash
source ./test.sh
a=11
b=22
add a b
脚本B2
#! /bin/bash
. ./test.sh
a=11
b=22
add a b
结果
ZHR:md zc$ ./test1.sh
33
解压缩
比较常用的是zip和tar.gz
zip流行于windows系统上的压缩文件(其他系统也可以打开)。zip格式开放而且免费。
tar是“tape archive”(磁带存档)的简称,它出现在还没有软盘驱动器、硬盘和
光盘驱动器的计算机早期阶段,随着时间的推移, tar命令逐渐变为一个将很多文件进行存档的工具,目前许多用于Linux操作系统的程序就是打包为tar档案文件的形式。 在Linux里面,tar一般和其他没有文件管理的压缩算法文件结合使用,用tar打包整个文件目录结构成一个文件,再用gz,bzip等压缩算法压缩成一次。也是Linux常见的压缩归档的处理方法。
zip
压缩
zip的压缩指令一般会搭配两个参数 -r 递归 和 -q 不显示指令执行过程
格式:zip 压缩文件名 被压缩的文件路径
不加-q
#! /bin/bash
zip -r hello.tar /Users/zc/Desktop/md/*
结果
ZHR:md zc$ ./test.sh
adding: Users/zc/Desktop/md/Burp Suite的简单使用.md (deflated 20%)
adding: Users/zc/Desktop/md/Docker进阶指令.md (stored 0%)
adding: Users/zc/Desktop/md/FastJson.md (deflated 10%)
adding: Users/zc/Desktop/md/Git.md (deflated 45%)
# 太多了,省略
加-q
#! /bin/bash
zip -r -q hello1.tar /Users/zc/Desktop/md/*
结果
ZHR:md zc$ ./test.sh
ZHR:md zc$
直接就生成了压缩文件。
解压
#! /bin/bash
unzip -q hello.tar
tar.gz
z:代表的是压缩
c:代表的是打包
x:代表的是解压
v:代表的是过程
f:代表的是指定文件名
压缩
#! /bin/bash
tar -zcvf one.tar.gz /Users/zc/Desktop/md/*
解压
-C 指定目录
#! /bin/bash
tar -zxvf one.tar.gz -C /Users/zc/Desktop/jieya
上一个命令执行后的退出状态$?
0表示没有错误,其他任何值表明有错误。$?只能返回一个数字,所以我们还要通过if来判断
#! /bin/bash
zhaoliu=(1 2 3 4 5 6 7 8)
for i in ${zhaoliu[@]}
do
echo ${i}
done
if [ $? -eq 0 ];then
echo "上一步已经循环完了"
fi
结果,也就是说我只有上面的for循环代码块执行完了,才会执行下面的if代码块里的内容
ZHR:md zc$ ./test.sh
1
2
3
4
5
6
7
8
上一步已经循环完了