目录
🍁shell变量替换
🍁定义变量
🍁shell变量运算
🍂整数运算
🍂小数运算
🦐博客主页:大虾好吃吗的博客
🦐专栏地址:Linux从入门到精通
shell变量替换
${变量#匹配规则} #从头开始匹配,最短删除
${变量##匹配规则} #从头开始匹配,最长删除
${变量%匹配规则} #从尾开始匹配,最短删除
${变量%%匹配规则} #从尾开始匹配,最长删除
${变量/旧字符串/新字符串} #替换字符串,仅替换第一个
${变量//旧字符串/新字符串} #替换字符串,替换全部
例1:从前往后删变量内容
[root@daxia ~]# Url=z3.www.baidu.com.cn
[root@daxia ~]# echo $Url
z3.www.baidu.com.cn
[root@daxia ~]# echo ${Url#*.} #删除以 . 分割的第一个字段
www.baidu.com.cn
[root@daxia ~]# echo ${Url##*.} #仅保留最后一个字段
cn
例2:从后往前删变量内容
[root@daxia ~]# echo $Url
z3.www.baidu.com.cn
[root@daxia ~]# echo ${Url%.*} #删除最后一个字段
z3.www.baidu.com
[root@daxia ~]# echo ${Url%%.*} #仅保留第一个字段
z3
例3:变量内容替换
[root@daxia ~]# echo $Url
z3.www.baidu.com.cn
[root@daxia ~]# echo ${Url/z3/l4} #替换第一个z3为l4
l4.www.baidu.com.cn
[root@daxia ~]# echo ${Url//z3/l4} #替换全部z3为l4
l4.www.baidu.com.cn
脚本题: 把/data下所有.txt文件,改名.bak,并tar包备份到/backup,最后解压还原文件名。合并起来做可能不理解,分开后尝试一下。
[root@daxia ~]# mkdir /data
[root@daxia ~]# mkdir /backup
[root@daxia ~]# touch /data/file{1..9}.txt
[root@daxia ~]# vim rename.sh
#!/bin/bash
File_txt=$(find /data -type f -iname "*.txt" |xargs > /data/txt.f)
for a in $(cat /data/txt.f)
do
mv $a $a.bak
done
tar zcf /backup/file.tar.gz /data/*.bak
File_txt=$(find /data -type f -iname "*.bak" |xargs > /data/bak.f)
for b in $(cat /data/bak.f)
do
mv $b ${b%.*}
done
#执行脚本
[root@daxia ~]# sh rename.sh
tar: 从成员名中删除开头的“/”
定义变量
happiness="towards the sea, with spring flowers blossoming,the the" 执行脚本,输出变量,并要求:
打印变量值字符串长度
删除所有的the
替换第一个the为that
替换所有the为that 用户按“1|2|3|4” ,输出相应选项内容,q|Q 退出
[root@daxia ~]# vim test1.sh
#!/bin/bash
happiness="towards the sea, with spring flowers blossoming,the the"
echo $happiness
cat <<EOF
1) 打印happiness长度
2) 删除所有的the
3) 替换第一个the为that
4) 替换所有the为that
EOF
read -p "请输入数字 1|2|3|4,或 q|Q: " var
if [ $var == q ];then
exit
fi
if [ $var == Q ];then
exit
fi
if [ $var -eq 1 ];then
echo "当前happiness变量的长度是:${#happiness}"
fi
if [ $var -eq 2 ];then
echo ${happiness//the/}
fi
if [ $var -eq 3 ];then
echo ${happiness/the/that}
fi
if [ $var -eq 4 ];then
echo ${happiness//the/that}
fi
shell变量运算
整数运算
expr、$(())、$[],不支持小数运算
a+b 加 a-b 减 a*b 乘(expr计算时,用 * ) a/b 除 a%b 余
例1:
[root@daxia ~]# a=20
[root@daxia ~]# b=10
[root@daxia ~]# expr $a + $b
30
[root@daxia ~]# echo $(($a+$b))
30
[root@daxia ~]# echo $[$a+$b]
30
例2:递增和递减
[root@daxia ~]# echo $((a++)) #表示先打印变量a,然后在加一位数值变成21,
20
[root@daxia ~]# echo $((a--))
21
[root@daxia ~]# echo $((++b)) #表示先加一位数值,在打印变量
11
[root@daxia ~]# echo $((--b))
10
[root@daxia ~]# echo $((100*(1+100)/2)) #求1加到100的和
5050
小数运算
bc加”|“管道符使用,可以将前面打印的结果给bc工具处理。
[root@daxia ~]# yum -y install bc #安装bc工具
[root@daxia ~]# echo "2*4"
2*4
[root@daxia ~]# echo "2*4" | bc
8
[root@daxia ~]# echo "2^4" | bc
16
[root@daxia ~]# echo "scale=2;3/2" | bc
1.50
[root@daxia ~]# awk 'BEGIN{print 3/2}' #awk也可以计算
1.5
脚本题: 例1:查看内存使用率,仅保留整数
[root@daxia ~]# vim mem.sh
#!/bin/bash
Mem_use=$(free -m |grep ^M |awk '{print $3/$2*100}')
if [ ${Mem_use%.*} -ge 80 ];then
echo "memory is overfull: ${Mem_use%.*}%"
else
echo "memory is OK: ${Mem_use%.*}%"
fi
[root@daxia ~]# sh mem.sh
memory is OK: 47%
例2:查看磁盘使用状态,使用率超出80%就报警 思路: 怎么查看磁盘 怎么提取使用率 整数判断
[root@daxia ~]# vim disk.sh
#!/bin/bash
Disk=$(df -h |grep /$ |awk '{print $(NF-1)}')
if [ ${Disk%\%} -ge 80 ];then
echo "你的磁盘使用率过高:$Disk"
else
echo "你的磁盘使用率正常:$Disk"
fi
[root@daxia ~]# sh disk.sh
你的磁盘使用率正常:31%