shell变量替换以及变量运算基础
1.shell变量替换 **
${变量#匹配规则} 从头开始匹配,最短删除
${变量##匹配规则} 从头开始匹配,最长删除
${变量%匹配规则} 从尾开始匹配,最短删除
${变量%%匹配规则} 从尾开始匹配,最长删除
${变量/旧字符串/新字符串} 替换字符串,仅替换第一个
${变量//旧字符串/新字符串} 替换字符串,替换全部
例1:从前往后删变量内容
Qh_url=mirrors.tuna.tsinghua.edu.cn
echo $Qh_url
echo ${Qh_url#*.} #删除.分隔的第一个字段
echo ${Qh_url##*.} #仅保留最后一个字段
例2:从后往前删变量内容
Qh_url=mirrors.tuna.tsinghua.edu.cn
echo $Qh_url
echo ${Qh_url%.*} #删除最后一个字段
echo ${Qh_url%%.*} #仅保留第一个字段
例3:变量内容替换
Qh_url=mirrors.tuna.tsinghua.edu.cn
echo $Qh_url
echo ${Qh_url/u/U}
echo ${Qh_url//u/U}
脚本题:
1、把/data下所有.txt文件,改名.bak,并tar包备份到/backup,最后解压还原文件名
mkdir /data
touch /data/file{1..9}.txt
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
2、定义变量,happiness="towards the sea, with spring flowers blossoming,the the"
执行脚本,输出变量,并要求:
1) 打印变量值字符串长度
2) 删除所有的the
3) 替换第一个the为that
4) 替换所有the为that
用户按“1|2|3|4” ,输出相应选项内容。
vim happiness.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变量运算
1.整数运算,expr、$(())、$[],不支持小数运算 **
a+b 加
a-b 减
a*b 乘(expr计算时,用 \* )
a/b 除
a%b 余
例1:
a=20
b=10
expr $a + $b
echo $(( $a + $b ))
echo $[ $a + $b ]
例2:递增和递减
echo $((a++))
echo $((a--))
echo $((++b))
echo $((--b))
echo $((100*(1+100)/2)) 求1到100之和
2. 小数运算,bc工具 *
yum -y install bc
echo "2*4" |bc
echo "2^4" |bc
echo "scale=2;3/2" |bc
awk 'BEGIN{print 3/2}'
脚本题:
例1:查看内存使用率,仅保留整数
vim mem_use.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
例2:脚本输出系统版本、内核版本平台、虚拟平台、主机名、网卡ip
例3:查看磁盘使用状态,使用率超出80%就报警
思路:
怎么查看磁盘
怎么提取使用率
整数判断
vim disk_use.sh ***
#!/bin/bash
Disk=$(df -h |grep /$ |awk '{print $(NF-1)}')
if [ ${Disk%\%} -ge 80 ];then
echo "你的磁盘使用率过高:$Disk"
else
echo "你的磁盘使用率正常:$Disk"
fi