shell编程入门(三)

本文介绍了Shell编程中的字符串操作,包括获取长度和提取子字符串;详细讲解了数组的定义、读取及遍历;展示了如何在脚本中包含其他脚本;并探讨了zip和tar.gz的压缩与解压方法。内容覆盖了Shell编程的基础知识,适合初学者参考。
摘要由CSDN通过智能技术生成

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
上一步已经循环完了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值