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