云计算运维 · 第三阶段 · shell编程2

学习b记 · 第三阶段

一、shell编程

1、数值运算
    1)expr
    2)$(())
    3)$[] #前面这三个直接echo测试就可
    4)let#这个可以直接运算变量
    5)bc#支持小数
    #输入两个随机数进行运算
        #!/bin/bash
        echo $1+$2'='`echo $1+$2 | bc`
        echo $1-$2'='`echo $1-$2 | bc`
        echo $1*$2'='`echo $1*$2 | bc`
        echo $1/$2'='`echo $1/$2 | bc`
        echo $1%$2'='`echo $1%$2 | bc`

    6)awk#支持小数
    #小测试,判断输入的数必须为整数,用正则,两个中括号,这个使用正则,要用两个 [[ ]],多个条件用 && || 
    [[ 100 =~ ^[0-9]+$ ]] && echo Y || echo N #前面的表达式满足就输出Y,不满足就输出N
    #判断用户传参不能为空
    -z 长度为0则为真
    -n 长度不为0则为真
    [ -z $num ] && echo Y || echo N #如果$num没赋值就是Y
  
2、文件判断
    [ -f file ] # 判断文件并且普通文件是否存在
    [ -d dir ] # 判断目录是否存在
    [ -r file ] # 文件可读则为真
    [ -w file ] # 文件可写则为真
    [ -x file ] # 文件可执行则为真
    [ -e file ] # 文件存在则为真
    #这么写都一样的,就返回true和false,可以用作if做流程控制
    [root@test03 script]# [ -f /etc/hosts ] && echo Y || echo N
    Y
    [root@test03 script]# [ -f /etc/hostss ] && echo Y || echo N
    N

3、整数比对
    -eq #相等
    -ne #不等于
    -lt #小于
    -le #小于等于
    -gt #大于
    -ge #大于等于
    #举一个例子都是一样的用法,action是一个内置函数,像我这么用就行
    [root@test03 script]# . /etc/init.d/functions
    [root@test03 script]# [ 100 -eq 10 ] && action /bin/true || action /bin/false
    /bin/false								[OK]
    #会用这些比较表达式就可以通过取值、定时任务、发送邮件等进行一些简单的监控任务,直接写一个脚本
    
     #配置一下邮件
      vim /etc/mail.rc
      set from=[email protected]
      set smtp=smtps://smtp.qq.com:465
      set smtp-auth-user=[email protected]
      set smtp-auth-password=#客户端授权码,不会获取去百度
      set smtp-auth=login
      set ssl-verify=ignore
      set nss-config-dir=/etc/pki/nssdb/
      #脚本
      use_disk=`df -h|awk 'NR==2{print $(NF-1)}'`#取到硬盘的使用率
      if [ ${use_disk%\%} -gt 6 ];then#比较判断
      echo "当前磁盘使用率已经高于80%,请及时处理" > /tmp/disk.log
      	mail -s "`date +%F-%H-%M`_磁盘使用率告警" #改成你自己的@qq.com < /tmp/disk.log &>/dev/null
      else
      	echo "磁盘使用率正常"
      	echo "当前磁盘使用正常,请继续摸鱼" > /tmp/disk.log
      	mail -s "`date +%F-%H-%M`_摸鱼告警"  #改成你自己的@qq.com < /tmp/disk.log &>/dev/null
      fi
      #写到定时任务,每半小时执行一次
      vim /etc/crontab
      30 * * * * root sh /server/scripts/disk.sh &>/dev/null
1、补充一点变量字符串
    #创建一个url变量赋值。。。
    [root@shell script]# url=www.baidu.com
    [root@shell script]# echo $url
    www.baidu.com
    #从前往后 # 去掉www. 或者用通配符都可 ${url*.} 或者这样{url*.*.}   就剩com
    [root@shell script]# echo ${url#www.}
    baidu.com
    #从后往前去 %
    [root@shell script]# echo ${url%.*}
    www.baidu
    #上面的脚本获取值不是这么写的吗${use_disk%\%} 这里的 \ 是撬棍,可用于取值带符号的直接把符号干掉
    #替换 / ,就补充这三点
    [root@shell script]#  echo ${url/baidu/sina}
    www.sina.com

2、多整数比较
    -a and
    -o or
    #例子
    [ 10 -eq 10 -a 100 -gt 20 ] && echo Y || echo N   #同时满足两个条件
    [ 10 -eq 11 -o 100 -gt 20 ] && echo Y || echo N   #满足一个就行
1、if #所能判断的值只有true false 或者 0 1
    1)语法结构:
    if [ 条件表达式 ];then
    命令集合
    fi
    
    2)if [ 条件表达式 ]
    then
    命令集合
    fi
#直接上案例,写一个安装服务的脚本
#这个大部分都是赋值的,看的我自己都笑了,就写个意思
menu1(){
	echo -e "\t\t\t\t\033[35m 1.PHP \033[0m"
	echo -e "\t\t\t\t\033[35m 2.Redis \033[0m"
	echo -e "\t\t\t\t\033[35m 3.Zabbix \033[0m"
	echo -e "\t\t\t\t\033[35m 4.退出 \033[0m"
}
menu2(){
	echo -e "\t\t\t\t\033[35m 1.PHP5.4 \033[0m"
	echo -e "\t\t\t\t\033[35m 2.PHP7.1 \033[0m"
	echo -e "\t\t\t\t\033[35m 3.PHP7.2 \033[0m"
	echo -e "\t\t\t\t\033[35m 4.返回上一级 \033[0m"
}
while true
do
	menu1
	read -p "请输入你要安装的软件编号: " num
	if [ $num -eq 1 ];then
		menu2
		while true
		do
			read -p "请输入要安装的版本编号[m帮助]: " num1
			if [ $num1 = 1 ];then
				echo yum instal php5.4 -y
			elif [ $num1 = 2 ];then
				echo yum instal php7.1 -y
			elif [ $num1 = 3 ];then
				echo yum instal php7.2 -y
			elif [ $num1 = m ];then
				clear
				menu2
			elif [ $num1 = 4 ];then
				break
			fi
			done
	elif [ $num -eq 2 ];then
		echo yum install redis -y
	elif [ $num -eq 3 ];then
		echo yum install zabbix -y
	elif [ $num -eq 4 ];then
		clear
		exit
	fi
done


你可能感兴趣的:(云计算,运维)