【Linux脚本篇】shell变量的使用

简介: 【Linux脚本篇】shell变量的使用

shell变量替换

${变量#匹配规则}                                         #从头开始匹配,最短删除

${变量##匹配规则}                                      #从头开始匹配,最长删除

${变量%匹配规则}                                       #从尾开始匹配,最短删除

${变量%%匹配规则}                                    #从尾开始匹配,最长删除

${变量/旧字符串/新字符串}                          #替换字符串,仅替换第一个

${变量//旧字符串/新字符串}                         #替换字符串,替换全部

例1:从前往后删变量内容

1. [root@daxia ~]# Url=z3.www.baidu.com.cn
2. [root@daxia ~]# echo $Url
3. z3.www.baidu.com.cn
4. [root@daxia ~]# echo ${Url#*.}              #删除以 . 分割的第一个字段
5. www.baidu.com.cn
6. [root@daxia ~]# echo ${Url##*.}             #仅保留最后一个字段
7. cn

例2:从后往前删变量内容

1. [root@daxia ~]# echo $Url
2. z3.www.baidu.com.cn
3. [root@daxia ~]# echo ${Url%.*}              #删除最后一个字段
4. z3.www.baidu.com
5. [root@daxia ~]# echo ${Url%%.*}             #仅保留第一个字段
6. z3

例3:变量内容替换

1. [root@daxia ~]# echo $Url
2. z3.www.baidu.com.cn
3. [root@daxia ~]# echo ${Url/z3/l4}           #替换第一个z3为l4
4. l4.www.baidu.com.cn
5. [root@daxia ~]# echo ${Url//z3/l4}          #替换全部z3为l4
6. l4.www.baidu.com.cn

脚本题: 把/data下所有.txt文件,改名.bak,并tar包备份到/backup,最后解压还原文件名。合并起来做可能不理解,分开后尝试一下。

1. [root@daxia ~]# mkdir /data
2. [root@daxia ~]# mkdir /backup
3. [root@daxia ~]# touch /data/file{1..9}.txt
4. [root@daxia ~]# vim rename.sh
5. #!/bin/bash
6. File_txt=$(find /data -type f -iname "*.txt" |xargs > /data/txt.f)
7. for a in $(cat /data/txt.f)
8. do
9. mv $a $a.bak
10. done
11. 
12. tar zcf /backup/file.tar.gz  /data/*.bak
13. 
14. File_txt=$(find /data -type f -iname "*.bak" |xargs > /data/bak.f)
15. for b in $(cat /data/bak.f)
16. do
17. mv $b ${b%.*}
18. done
19. 
20. 
21. #执行脚本
22. [root@daxia ~]# sh rename.sh
23. tar: 从成员名中删除开头的“/”

定义变量

happiness="towards the sea, with spring flowers blossoming,the the" 执行脚本,输出变量,并要求:

  1. 打印变量值字符串长度
  2. 删除所有的the
  3. 替换第一个the为that
  4. 替换所有the为that 用户按“1|2|3|4” ,输出相应选项内容,q|Q 退出
1. [root@daxia ~]# vim test1.sh
2. #!/bin/bash
3. happiness="towards the sea, with spring flowers blossoming,the the"
4. 
5. echo $happiness
6. 
7. cat <<EOF
8. 1) 打印happiness长度
9. 2) 删除所有的the
10. 3) 替换第一个the为that
11. 4) 替换所有the为that
12. EOF
13. 
14. read -p "请输入数字 1|2|3|4,或    q|Q: " var
15. 
16. if [ $var == q ];then
17. exit
18. fi
19. 
20. if [ $var == Q ];then
21. exit
22. fi
23. 
24. if [ $var -eq 1 ];then
25. echo "当前happiness变量的长度是:${#happiness}"
26. fi
27. 
28. if [ $var -eq 2 ];then
29. echo ${happiness//the/}
30. fi
31. 
32. if [ $var -eq 3 ];then
33. echo ${happiness/the/that}
34. fi
35. 
36. if [ $var -eq 4 ];then
37. echo ${happiness//the/that}
38. fi

shell变量运算

整数运算

expr、$(())、$[],不支持小数运算

a+b 加 a-b 减 a*b 乘(expr计算时,用 * ) a/b 除 a%b 余

例1:

1. [root@daxia ~]# a=20
2. [root@daxia ~]# b=10
3. [root@daxia ~]# expr $a + $b
4. 30
5. [root@daxia ~]# echo $(($a+$b))
6. 30
7. [root@daxia ~]# echo $[$a+$b]
8. 30

例2:递增和递减

1. [root@daxia ~]# echo $((a++))       #表示先打印变量a,然后在加一位数值变成21,
2. 20
3. [root@daxia ~]# echo $((a--))
4. 21
5. [root@daxia ~]# echo $((++b))       #表示先加一位数值,在打印变量
6. 11
7. [root@daxia ~]# echo $((--b))
8. 10
9. [root@daxia ~]# echo $((100*(1+100)/2))         #求1加到100的和
10. 5050

小数运算

bc加”|“管道符使用,可以将前面打印的结果给bc工具处理。

1. [root@daxia ~]# yum -y install bc           #安装bc工具
2. 
3. [root@daxia ~]# echo "2*4"
4. 2*4
5. [root@daxia ~]# echo "2*4" | bc
6. 8
7. [root@daxia ~]# echo "2^4" | bc
8. 16
9. [root@daxia ~]# echo "scale=2;3/2" | bc
10. 1.50
11. [root@daxia ~]# awk 'BEGIN{print 3/2}'              #awk也可以计算
12. 1.5

脚本题: 例1:查看内存使用率,仅保留整数

1. [root@daxia ~]# vim mem.sh
2. #!/bin/bash
3. Mem_use=$(free -m |grep ^M |awk '{print $3/$2*100}')
4. if [ ${Mem_use%.*} -ge 80 ];then
5. echo "memory is overfull: ${Mem_use%.*}%"
6. else
7. echo "memory is OK: ${Mem_use%.*}%"
8. fi
9. 
10. [root@daxia ~]# sh mem.sh
11. memory is OK: 47%

例2:查看磁盘使用状态,使用率超出80%就报警 思路: 怎么查看磁盘 怎么提取使用率 整数判断

1. [root@daxia ~]# vim disk.sh
2. 
3. #!/bin/bash
4. Disk=$(df -h |grep /$ |awk '{print $(NF-1)}')
5. 
6. if [ ${Disk%\%} -ge 80 ];then
7. echo "你的磁盘使用率过高:$Disk"
8. else
9. echo "你的磁盘使用率正常:$Disk"
10. fi
11. 
12. [root@daxia ~]# sh disk.sh
13. 你的磁盘使用率正常:31%


相关文章
|
7天前
|
关系型数据库 Shell 网络安全
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
|
1月前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
102 32
|
1月前
|
存储 Linux 网络安全
linux应急响应检查脚本
通过这个脚本,可以快速收集系统的关键信息,有助于在发生问题时进行及时的应急响应和分析。
111 34
|
18天前
|
JavaScript Shell C#
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
102 2
|
3月前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
4月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
146 0
Linux 如何更改默认 Shell
|
4月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
182 1
|
Unix Shell Linux
|
7月前
|
Shell Linux 程序员
在Linux中, 什么是shell函数?如何使用它们?
在Linux中, 什么是shell函数?如何使用它们?