位置变量

  • $0 代表了脚本的名称,如何全路径执行,则脚本名称带全路径

使用方法 给用户提示
#basename test.sh #只显示脚本名称

  • $n 脚本的第N个参数 0被脚本名称占用 从1开始 $1 $2…$9后面的参数需要加{}
  • $# 获取脚本传参的总个数, 控制脚本的传递参数的个数 [ $# -ne 2 ] && echo “请输入两个参数” && exit
  • $* 获取脚本所有的参数 不加双引号和$@相同,加上双引号 则把参数视为一个参数$1$2$3
  • $@ 获取脚本所有的参数,不加双引号和$相同,加上双引号则把参数是为独立的参数 $1 $2 $3 $和$@在脚本中相同,在循环体内不同
  • $? 获取上一条命令的执行状态结果 0为成功 非0为失败
  • $$ 获取脚本的PID
  • $! 获取上一个在后台运行的脚本的PID 调试使用
  • $_ 获取命令行最后一个参数,相当于ESC.

    环境变量

    查看: env set
    变量生效顺序
    /etc/profile 开机所有用户开机加载此文件
    .~/.bashrc
    .bash_profile
    .bashrc
    /etc/bashrc

    数值运算

  • expr 整数运算

expr a + b

  • $(()) 整数运算

$((a+b))

  • $[] 整数运算

$[a+b]

  • bc 整数运算和小数运算

echo a+b|bc

  • awk python

    字符串截取

    image.png

    条件表达式

    用法格式
    test -f FILE
    [ -f FILE ] —->常用

  • 文件测试

-e 是否存在 存在为真
-f 是否为文件
-d 是否为目录 是否存在
-x 是否为可执行
-r 存在是否可读
-w 存在是否可写

数值比较

语法格式 [ a 比较符 b ]
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
[[]] 建议用 == != > < >= <= 比较符
题目1:统计磁盘使用率,如果磁盘大于80% 则发送邮件报警,小于则提示ok
1.取出磁盘当前使用率
# DiskUseRate=df -h| grep /$ | awk '{print $(NF-1)}'
2.用数字表达式判断大下,如果大于则发送邮件,小于则提示ok
# [ ${DiskUseRate%\%} -gt 80 ] && echo “磁盘使用已超过百分之5,当前使用率为$DiskUseRate |mail -s “test” 505597482@qq.com” || echo “磁盘使用正常,当前使用率为$disk”
image.png
题目2:内存使用率超过80%报警,小于则提示ok
#UseMem= free | awk 'NR==2{print $3/$2*100}'
#[ ${UseMem%.*} -gt 80 ] && echo mail || echo ok

多整数比较

-a and
-o or

字符串比较

=
!=
字符串比较需要加双引号
-z 字符串长度为零则为真
-n 字符串长度不为零则为真

正则比较

需要使用[[]]

linux路由条目配置

route add default gw 10.0.0.254
route del default gw 10.0.0.254
ip route add 0/0 via 10.0.0.254
ip route del 0/0 via 10.0.0.254
网卡添加多个地址
ip addr add 10.0.0.200/24 dev ens32
for i in {50..200};do ip addr add 10.0.0.$i/24 dev ens32; done
策略路由 VPN拨号会使用
# cat /etc/iproute2/rt_tables
添加一个表, 给这个表设置一个路由
ip route add 0/0 via 10.0.0.254 table test
ip rule add from PUBLIC_IP table test