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


相关文章
|
3天前
|
分布式计算 Hadoop Shell
使用shell脚本实现自动SSH互信功能
使用shell脚本实现自动SSH互信功能
10 1
|
3天前
|
网络协议 Shell Linux
LabVIEW 在NI Linux实时设备上访问Shell
LabVIEW 在NI Linux实时设备上访问Shell
|
4天前
|
Unix Shell Linux
轻松编写 AIX Shell 脚本
轻松编写 AIX Shell 脚本
12 1
|
4天前
|
Shell Linux
【Linux】进程实践项目(更新中) — 自主shell编写
前几篇文章,我们学习进程的相关知识:进程概念,进程替换,进程控制。熟悉了进程到底是个什么事情,接下来我们来做一个实践,来运用我们所学的相关知识。这个项目就是手搓一个shell模块,模拟实现Xshell中的命令行输入。
10 1
|
5天前
|
监控 关系型数据库 Shell
Shell脚本入门:从基础到实践,轻松掌握Shell编程
Shell脚本入门:从基础到实践,轻松掌握Shell编程
|
5天前
|
关系型数据库 MySQL Shell
在Centos7中利用Shell脚本:实现MySQL的数据备份
在Centos7中利用Shell脚本:实现MySQL的数据备份
|
5天前
|
Shell Linux 信息无障碍
5 个有用的 Linux Shell 转义序列
5 个有用的 Linux Shell 转义序列
|
5月前
|
Shell 索引
shell脚本入门到实战(四)- 数组
shell脚本入门到实战(四)- 数组
|
5月前
|
Shell
shell脚本入门到实战(三) - 变量
shell脚本入门到实战(三) - 变量
|
5月前
|
Shell Linux 人机交互
shell脚本入门到实战(二)--shell输入和格式化输出
shell脚本入门到实战(二)--shell输入和格式化输出