4.shell变量运算

加、减、乘、除、取余

用途:例如模拟计算器

如何实现运算:

整数运算:expr、$(()) 、$[]

bash支持对整数四则运算,但是并不支持浮点运算

小数运算:bc、awk

expr 例:

在这里插入图片描述

$(()) 例:

在这里插入图片描述

$[] 例:

在这里插入图片描述


bc 例:

在这里插入图片描述

awk 例:

在这里插入图片描述


案例
案例1:根据系统时间,打印今年和明年的时间。
 echo "今年是 $(date +%Y) 年"

echo "明年是 $(( $(date +%Y)+1)) 年"

在这里插入图片描述


案例2:根据系统时间,获取今年还剩下多少星期,已经过了多少星期

思路梳理:
​ 1.今天是今年的第多少天。 date +%j 可以获得今天的是今年的第几天
​ 2.通过已获取的天数 /7 是不是就能知道已经过了多少周。
​ 3.通过 ( 365 - 已过的天数)/ 7 还有多少周到下一个新年。

echo $(date +%j)

echo "今年已经过去 $(( $(date +%j) /7 )) 个星期"

echo "今年还剩 $(( (365-$(date +%j)) /7 )) 个星期"

在这里插入图片描述

案例3:实现计算器的功能,允许传入2个值,对传入的值进行 加减 乘除。

思路梳理:

​ 1.可以选择直接传递参数的方式。要能控制能传入的个数。
​ 2.拿到传入的值之后,进行加减乘除。

#!/bin/bash

if [ $# -ne 2 ];then  #如果总共传递的参数个数不等于2,就报错要求输入两个参数
	echo "error 请输入两个参数"
	exit
fi
echo "$1 + $2 = $(( $1 + $2 ))" #第1个shell脚本位置参数+第2个shell脚本位置参数,后面的以此类推
echo "$1 - $2 = $(( $1 - $2 ))"
echo "$1 * $2 = $(( $1 * $2 ))"
echo "$1 / $2 = $(( $1 / $2 ))"
echo "$1 % $2 = $(( $1 % $2 ))"

在这里插入图片描述


案例4:

使用Shell脚本打印,
系统版本、
内核版本平台、
虚拟平台、
静态主机名、
ens192网卡IP地址、
lo网卡IP地址、
当前主机的外网IP地址 curl icanhazip.com

思路梳理:
系统版本:cat /etc/redhat-release
内核版本平台: uname -r
虚拟平台:dmidecode -s system-product-namevirt-what
在这里插入图片描述
在这里插入图片描述

静态主机名:hostnamectl |awk -F ':' '/Static hostname/ {print $2}'
在这里插入图片描述

ens192网卡IP地址 :ip add show ens192|awk '/inet/ {print $2}'|awk -F '/' 'NR==1{print $1}'
lo网卡IP地址 :ip add show lo|awk '/inet/ {print $2}'|awk -F '/' 'NR==1{print $1}'

在这里插入图片描述
在这里插入图片描述

打印当前主机的外网IP地址:
echo $(curl -s icanhazip.com)

#!/bin/bash

GREEN="echo -e \033[1;32m"

$GREEN------------------------System info----------------------------------

echo "系统版本:$(cat /etc/redhat-release)"
echo "内核版本平台: $(uname -r)"
echo "虚拟平台:$(virt-what)"
echo "静态主机名: $(hostnamectl |awk -F ':' '/Static hostname/ {print $2}')"
echo "ens192网卡IP地址: $(ip add show ens192|awk '/inet/ {print $2}'|awk -F '/' 'NR==1{print $1}')"
echo "lo网卡IP地址: $(ip add show lo|awk '/inet/ {print $2}'|awk -F '/' 'NR==1{print $1}')"
echo "当前主机的外网IP地址:$(curl -s icanhazip.com)"

$GREEN---------------------------------------------------------------------

脚本执行效果:
在这里插入图片描述


案例5:查看系统当前有几个登陆的用户

思路梳理:
使用w命令查看当前用户登录的情况
在这里插入图片描述
再通过awk获取到想要输出的信息 (包含up的行,第6列,就是我们想要的信息)

#!/bin/bash

echo "系统当前有 $(w |awk '/up/ {print $6}') 个登录的用户"

在这里插入图片描述


案例6:筛选出当前系统存在的僵尸进程

僵尸进程是一个已经完成执行但仍在进程表中的进程。

僵尸进程的状态(STAT)为Z

ps -A -o stat,ppid,pid,cmd |grep -e '^[Zz]'|wc -l

-A #展示所有进程
-o #自定义输出项目
stat #是类型 
ppid 是进程的父进程号  
pid 进程号
cmd 进程名

案例7:查看当前系统已使用内存的百分比
#!/bin/bash

mem=$(free -m |awk '/Mem/{print $3/$2*100}')
echo "当前系统已使用内存:${mem%.*} %"

执行结果
在这里插入图片描述


案例8:查看当前系统已使用磁盘的百分比

匹配以/结尾的内容,然后输出第五列
df -h |awk '/\/$/ {print $5}'


匹配以/结尾的内容,然后输出第倒数第二列
df -h |awk '/\/$/ {print $(NF-1)}'

输出的内容都一样

#!/bin/bash

echo "当前系统已使用磁盘 $(df -h |awk '/\/$/ {print $(NF-1)}') "


在这里插入图片描述


案例9:查看当前系统已使用CPU的百分比

思路梳理:
使用top命令查看cpu空闲百分比(id)。
top -n1限制迭代次数,就是让top只输出一次
100-空闲百分比=已使用百分比
在这里插入图片描述

#!/bin/bash

echo "当前系统已使用CPU $(top -n1|awk 'NR==3{print 100-$8}') %"  

#打印top输出内容的第三行,再用100减去第八列后的结果

执行结果
在这里插入图片描述


Shell变量总结

1.什么是变量
2.变量的规范(命名、格式)
3.定义变量的方式
1.自定义,自行定义
2.系统的环境变量,可直接使用,任何用户都行。
3.预定义变量,Shell内置的方法。直接使用
4.调用变量 $var ${var}
5.非交互式传递变量 read、类似于python中input
6.变量替换
7.变量运算

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值