披星戴月脚本计算

分层与巡回结构

if语句是实际上临蓐工作中最珍视且最常用的言辞,所以,必需调控稳定。

一、case运用

if条件句

*#!/bin/bash
#第1段程序,用case语句达成二个采摘语句#
#read -p "请输入二个名字:" i
#case $i in
#redhat)
#   echo "fedora";;
#fedora)
#   echo "redhat";;
#
)
#   echo "Error";;
#esac

if条件句语法

  • 单分支结构

语法

  1. if [ 条件 ]

  2.   then

  3.     指令

  4. fi

  5. if [ 条件 ];then

  6.     指令

  7. fi

条件表达式[ -f "$file1" ]&& echo 1,相当于上面包车型大巴if语句。

  1. if [ -f "$file1" ];then

  2.     echo 1

  3. fi

  • 双分段协会
  1. if [ 条件 ]

  2.   then

  3.     指令集1

  4. else

  1.     指令集2

  2. fi

法规表明式[ -f "$file1" ]&& echo 1||echo 0,也正是双分支if [ -f "$file1" ];then echo 1;else echo 0;fi。

  • 多分支组织
  1. if 条件

  2.   then

  3.     指令

  4. elif 条件

  5.   then

  6.     指令

  7. elif 条件

  8.   then

  9.     指令

  10.     ...

  11.   else

  1. 2020欧洲杯官方投注-2020欧洲杯官方投注网址,    指令

  2. fi

#第2段程序,用case语句达成二个命令的七个挑选效能,比if语句简单#
#case $1 in
#-n|--new)
#  touch $2;;
#-e|--edit)
#  vim $2;;
#-c|--cat)
#  cat $2;;
#-r|--remove)
#  rm -rf $2;;
#*)
#  echo "Usage:$0 (-n|-e|-c|-r) 文件名";;
#esac**

单分支if条件句

支出shell脚本判别系统剩余内存的朗朗上口,假诺低于100M就邮件报告急察方给管理员,并投入种类准时职责每九分钟实行二次检查。

free -m|awk 'NR==2{print $4}'

  1. [root@lamp ~]# cat free_m.sh
  1. #!/bin/bash

  2.  

  3. FREE=`free -m|awk 'NR==3{print $4}'`

  1. if [ $FREE -lt 100 ]

  2.   then

  3.     echo "warning:The available memory $FREE."

  1.     exit 0

  2. fi

  3. echo "The available memory $FREE."

二、for运用

双多拨出if条件句

用if双分层落成read读入的不二秘籍比较两个数的大大小小。

  1. [root@lamp ~]# cat c3.sh

  2. #!/bin/bash

  3. read -p "Pls input two nums: " num01 num02

  1. [ -z $num01 ]&&{

  2.   echo "the num01 you input must be int."

  1.   exit 2

  2. }

  3. [ -z $num02 ]&&{

  4.   echo "the num02 you input must be int."

  1.   exit 2

  2. }

  3. expr $num01 + $num02 + 1 &>/dev/null

  4. [ $? -ne 0 ]&&{

  5.   echo "the num you input must be int."

  1.   exit 2

  2. }

  3. if [ $num01 -lt $num02 ]

  4.   then

  5.     echo "$num01 < $num02."

  6. elif [ $num01 -gt $num02 ]

  7.   then

  8.     echo "$num01 > $num02."

  9.   else

  1.     echo "$num01 = $num02."

  2. fi

用if双分层实现对nginx或mysql服务是或不是平常进行判定,使用过程数、端口、url的诀窍判别,假设经过没起,把进度运营。

web服务和数据库(mysql卡塔 尔(英语:State of Qatar)的监察和控制措施。

1、端口监察和控制

地面监察和控制:netstat、ss、lsof

长间隔监察和控制:telnet、nmap、nc

telnet监察和控制端口

  1. [root@lamp ~]# echo -e "n"|telnet www.baidu.com 80|grep Connected|wc -l

  2. Connection closed by foreign host.

  1. 1

nmap监察和控制端口

  1. [root@lamp ~]# nmap www.baidu.com -p 80|grep open|wc -l

  2. 1

nc监察和控制端口

  1. [root@lamp ~]# nc -z 192.168.163.128 22|grep succeeded|wc -l

  2. 1

2、进度监察和控制

本地监察和控制:ps -ef|grep mysql|wc -l

3、wget、curl,http格局基于再次回到值恐怕重临内容判定。

4、header(http卡塔 尔(英语:State of Qatar),http形式基于状态码判定。

5、数据库特有通过mysql顾客端连接,根据重临值可能再次来到内容决断。

  1. [root@lamp ~]# cat check_db.sh
  1. #!/bin/bash

  2. #local

  3. if [ "`netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'`" = "3306" ]

  4. #if [ `ps -ef|grep mysql|grep -v grep|wc -l` -gt 0 ]

  5. #if [ `netstat -lntup|grep mysqld|wc -l` -gt 0 ]

  6. #if [ `lsof -i tcp:3306|wc -l` -gt 0 ]

  7.  

  8. #remote

  9. #if [ `nmap 192.168.1.123 -p 3306 2>/dev/null|grep open|wc -l` -gt 0 ]

  10. #if [ `nc -w 2 192.168.1.123 3306 &>/dev/null&&echo ok|grep ok|wc -l` -gt 0 ]

  1.   then

  2.     echo "Mysql is Running."

  3. else

  1.     echo "Mysql is Stopped."

  2.     /deta/mysql start

  3. fi

 

  1. [root@lamp ~]# cat check_web.sh
  1. #!/bin/bash

  2. if [ "`curl -I -s -o /dev/null -w "%{http_code}n" " = "200" ]

  3. #if [ `curl -I 2>/dev/null|head -1|egrep "200|302|301"|wc -l` -eq 1 ]

  1. #curl -s &>/dev/null

  2. #if [ $? -eq 0 ]

  3. #if [ "`curl -s &>/dev/null&&echo $?`" = "0" ]

  4. #if [ "`curl -s " = "bbs" ]

  5.   then

  6.     echo "httpd is running."

  7. else

  1.     echo "httpd is stopped."

  2. fi

 

经过传参的主意往/etc/user.conf里增添顾客,具体供给如下:

1、命令用法:USAGE:sh adduser {-add|-del|-search} username

2、传参必要:假如参数为-add,表示增加前边接的客商名;即使参数为-del,表示删除前边接的客户名;假诺参数为-search,表示查找前面接的客商名。

3、倘使有同名的客商则不可能增进,未有相应客商则没有需求删除,查找到客户以致从未顾客时交由分明提醒。

4、/etc/user.conf无法被抱有外界客户之间删除或修改。

  1. [root@lamp ~]# cat user.sh

  2. #!/bin/bash

  3. ROOT_UID=0

  4.  

  5. if [ "$UID" -ne "$ROOT_UID" ]

  6.   then

  7.     echo "Mast be root to run this script."

  1.     exit 1

  2. fi

  3. if [ $# -ne 2 ]

  4.   then

  5.     echo "USAGE:sh $0 {-add|-del|-search} username."

  6.     exit 2

  7. fi

  8. check=$1

  9. name=$2

  10. if [ "$check" = "add" ]

  11.   then

  12.     result=`cat /etc/user.conf|grep -Fx "$name"`

  13.     [ -z $result ]&&{

  14.       echo "$name" >> /etc/user.conf

  15.       echo "user add "$name" is ok."

  16.       exit 0

  17.     }

  18.     echo "user $name is in."

  19.     exit 0

  20. elif [ "$check" = "del" ]

  21.   then

  22.     result=`cat /etc/user.conf|grep -Fx "$name"`

  23.     [ -z $result ]&&{

  24.       echo "user "$name" not find."

  25.       exit 0

  26.     }

  27.     sed -ri /^$name$/d /etc/user.conf

  1.     echo "user del "$name" is ok."

  2. elif [ "$check" = "search" ]

  3.   then

  4.     result=`cat /etc/user.conf|grep -Fx "$name"`

  5.     [ -z $result ]&&{

  6.       echo "user $name not find."

  7.       exit 0

  8.     }

  9.     echo $result

  10.     exit 0

  11. else

  1.     echo "USAGE:sh $0 {-add|-del|-search} username."

  2.     exit 1

  3. fi

 

获得文件md5值,防窜改。

  1. [root@lamp ~]# find ./ -type f|xargs md5sum

将md5值写入文件。

  1. [root@lamp ~]# find ./ -type f|xargs md5sum >/tmp/md5list

比较md5值。

  1. [root@lamp ~]# md5list -c /tmp/md5list  

**#!/bin/bash
#for i in 1 aa c 88
#do
#   echo $i
#done

for i in `cat /opt/user.txt`
do
   useradd user$i 2>/opt/userfalse.log
done**

**三、while运用**

 

#!/bin/bash
i=1
while [ $i -le 5 ]
do
  echo "请等待..."
#  let i++
   i=i++
done

**四、猜数字**

#!/bin/bash

#  “下边包车型大巴这段代码有BUG,假若未有输入数值,会报错”
#x=$[RANDOM%10]
#read -p "10 以内数字请猜生机勃勃猜:" cai
#
#   if [ $cai -gt $x ];then
#       echo "对不起,你猜大了,正确答案是:$x"
#   elif [ $cai -lt $x ];then
#       echo "对不起,你猜小了,正确答案是:$x"
#   else
#       echo "恭喜您,猜对了,精确答案就是:$x"
#   fi

#  "不猜到正确不苏息,展现猜的次数"
#x=$[RANDOM%10]
#i=0
#while :
#do
#  read -p "10 以内的数字猜风度翩翩猜:" cai
#  let i++  
#    if [ $cai -gt $x ];then
#        echo "对不起,你猜大了"
#    elif [ $cai -lt $x ];then
#        echo "对不起,你猜小了"
#    else
#        echo "恭喜您,猜对了,准确答案就是:$x ,你风流倜傥共猜了$i 次"
#        exit
#    fi
#done

#  "下边再来意气风发段升级代码消除BUG"
x=$[RANDOM%10]
i=0
while :
do
  read -p "10 以内的数字猜黄金时代猜:" cai
  let i++  
    if [ $cai -gt $x ];then
        echo "对不起,你猜大了"
    elif [ $cai -lt $x ];then
        echo "对不起,你猜小了"
    else
        echo "恭喜您,猜对了,精确答案正是:$x ,你风姿罗曼蒂克共猜了$i 次"
        exit
    fi
done

**五、端口状态**

#!/bin/bash
#     rpm -q httpd  &> /dev/null
#
#    if [ ! $? -eq 0 ];then
#         yum -y install httpd   &> /dev/null
#    fi
#
#        # systemctl status httpd  &> /dev/null
#          netstat -antpu |grep 80
#    if [ ! $? -eq 0 ];then
#          systemctl restart httpd  
#    fi

     rpm -q httpd  &> /dev/null
    if [ ! $? -eq 0 ];then
     yum -y install httpd   &> /dev/null
    fi
        # systemctl status httpd  &> /dev/null
         netstat -antpu |grep 80
    if [ ! $? -eq 0 ];then
           systemctl restart httpd
          if [ $? == 0 ];then
           echo "重启成功"
          fi
    fi

**六、非交互作用发邮件**

#!/bin/bash
mail -s "hello" root << EOF
first
second
third
...
tenth
EOF

**七、函数**

#!/bin/bash
cecho(){
   echo -e "33[$1m$233[0m"
}

cecho 32 OK
cecho 33 OK
cecho 34 Error
cecho 35 Hehe
**八、录入IP**

#!/bin/bash
i=1
while :
do
  read -p "请输入over截至也许输入你要录入的IP:" ip
  [ $ip == over ] && break
  x[$i]=$ip
  echo $ip >> /opt/temp/ip.log
  let i++
done
#echo ${x[@]}
echo ${x[*]}

**九、录数总计**

#!/bin/bash
sum=0
while :
do
  read -p "请输入数字:" num
  [ $num -eq 0 ] && break
#  let sum +=`$num`
  sum=$[sum+num]
done
echo "你输入的数字总和为:$sum"

**十、排序**

#!/bin/bash
read -p "请输入第2个整数:" num1
read -p "请输入第1个整数:" num2
read -p "请输入第多个整数:" num3

#率先种艺术:
#先定出num3为最大值,再定出num1、num2的尺寸
#if [ $num1 -gt $num3 ];then
#     t=$num3
#     num3=$num1
#     num1=$t
#fi
#if [ $num2 -gt $num3 ];then
#     t=$num3
#     num3=$num2
#     num2=$t
#fi
#if [ $num1 -gt $num2 ];then
#     t=$num2
#     num2=$num1
#     num1=$t
#fi
#echo "$num1,$num2,$num3"

#其次种方法:
#名师的措施,先定num1为最小值,然后相比较num2、num3的大大小小
#if [ $num1 -gt $num2 ];then
#tmp=$num1
#num1=$num2
#num2=$tmp
#fi
#if [ $num1 -gt $num3 ];then
#tmp=$num1
#num1=$num3
#num3=$tmp
#fi
#if [ $num2 -gt $num3 ];then
#tmp=$num2
#num2=$num3
#num3=$tmp
#fi
#echo "排序为:$num1,$num2,$num3"

本文由2020欧洲杯官方投注-2020欧洲杯官方投注网址发布于win7,转载请注明出处:披星戴月脚本计算

相关阅读