【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%


相关文章
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
106 1
|
1月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
59 2
6种方法打造出色的Shell脚本
|
23天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
50 1
|
28天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
45 2
|
1月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
2月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
73 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
51 6
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
53 1
|
2月前
|
存储 Java Shell
Shell 变量
10月更文挑战第2天
26 0