shell脚本案例

check_cluster_web_status.sh

功能:

检查由10服务器组成的WEB集群中服务器是否在线,网站服务是否处于运行状态?

执行脚本时,可以设置要检查服务器的台数,和指定要检查的服务器的ip地址。不在线服务器的ip地址和不在线时的时间保存到文件/tmp/ser.txt里。并把信息显示到屏幕上,同时统计把不在线服务的台数。


#!/bin/bash

rpm -qa elinks || yum -y install elinks&>/dev/null

declare -a webip

read -p "请输入你要检查的服务器台数: " num

num=${num:=10}

    for((i=1;i<=$num;i++))

    do  read -p "第个"$i"ip地址: " webip[$i]

    done

    sum=0

    sum1=0

    sum2=0

    for((j=1;j<=`echo ${#webip[@]}`;j++))

    do

        ping -c1 ${webip[j]}  &>/dev/null

        if [ $?-ne 0  ] ;then

               echo "${webip[j]} is not online"

               echo "${webip[j]}   notonline   `date +%F-%T`">>/tmp/weberror.txt

               let sum1++

        else   elinks --dump http://${webip[j]} &> /dev/null

               if [ $? -ne 0 ] ;then

                       echo "${webip[j]}  httpd isnot run"

                       echo "${webip[j]}   notrun   `date +%F-%T`">>/tmp/weberror.txt

                        let sum2++

               fi

        fi

       sum=`expr $sum1 + $sum2`

    done

    echo "共有$sum个服务器不在服务状态"

                                                                                                                                                      


正则表达式的课堂练习题   grep-lx.txt


1 显示文件中有字母或数字的行

grep "[a-Z0-9]" grep-lx.txt


2 显示文件中仅以一个空格开头的行

grep "^ [^ ]" grep-lx.txt


3 显示文件中以空格开头的行

grep "^ " grep-lx.txt


4 显示文件中有空格的行

grep " " grep-lx.txt

5 不显示文件中的空行

grep -v "^$" grep-lx.txt


6 显示文件中有tarena字样的行(不区分字母大写)

 grep -i"tarena" grep-lx.txt


7 显示文件中以任意符号开头的行

grep "^[^a-Z0-9]" grep-lx.txt


8 显示httpd.conf文件里的有效行(没有注释符号和不是空行的的行)

 grep -vE"^$|^#| #" /etc/httpd/conf/httpd.conf


9 统计/etc目录下有多少链接文件

ls -l /etc | grep "^l" | wc -l


10 显示文件中由任意3个字符组成的行

grep "^...$" grep-lx.txt

 grep -E"^.{3}$" grep-lx.txt


11 显示文件中以3个数字开头的行

 grep -E"^[0-9]{3}" grep-lx.txt


12 编写添加用户脚本时,使用password变量存储用户密码,

   密码要求如下:

   密码的总长度是8个字符 可以使用数字、字母、和下划线 但必须以数字   开头


#/bin/bash

read -p "请输入用户名: " username

read -p "请输入用户的密码(必须以数字开头的8位字符): "password

panduan(){

num=`echo $password | wc -c`

lenth=`expr $num - 1`

if  [ $lenth -ne8 ]; then

        echo"密码长度需要8位:"

        exit

else

        echo$password >/tmp/pass.txt

        grep -E'^[0-9][a-Z0-9_]{7}$' /tmp/pass.txt &>/dev/null

        if [ $?-ne 0 ] ;then

               echo "密码可以用数字、字母、和下划线 但必须以数字开头"

               exit

        fi

fi

}

panduan $password

username=${username:?请输入用户名}

id $username &>/dev/null

if [ $? -eq 0 ];then

        echo"$username 已存在"

        exit

else

        useradd$username

        echo$password | passwd --stdin $username &>/dev/null

fi

~         



13 显示文件中有root或daemon字样的行

 grep -E"root|daemon" grep-lx.txt


14 编写匹配MAC地址的正则表达式

grep  -E  '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}' mac.txt

 

15 编写匹配以下数据的正则表达式


IP地址  邮箱地址  主机名  ***号  手机号    区号

 必做     必做      必做    可选     可选    可选


IP地址:grep  --color -E \'^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])$'


邮箱: grep --color -E “([a-Z0-9]+.)+@([a-z]+.)+[a-z]”


主机名:([a-Z0-9]+.)+|[a-z].|.

 

 

 

IP地址正则表达式:

 

'^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])$'

 

sed练习题

1 删除文件中每行里的所有空格

Sed -i “s/ //g” a.txt

  删除文件中的空行

Sed -i “/^$/d” a.txt

2 删除文件中每行的第一个空格

sed -r "s/^(.*$)/\1/" grep-lx.txt

3 给文件中的1-10加注释符#

Sed -r“1,10s/([.]*)/#\1/” a.txt

4 去掉文件中前5行的注释符#

sed -r"1,5s/^#([.]*)$/\1/" a.txt

5 给文件里的所有大写字母加小括号  (A) (B)

 sed -r "s/([A-Z])/(\1)/g" grep-lx.txt

6 把系统的运行级别修改为3 (若已经是3 就改为5

 sed "/id/s/[0-6]/5/" /etc/inittab

6.1  获取当前系统安装盘的名称

df -h |head -2 | tail -1| awk '{print $1}'

6.2  删除文件中的空行                                                

Sed -i “/^$/d” a.txt

把文件里的每行输出3

Sed  “p,p,p” a.txt

9,删除文件每行的第一个字符。

sed -r"s/(^.)(.*)/\2/" grep-lx.txt

10,删除文件每行的第二个字符。

sed -r"s/(^.)(.)(.*)/\1\3/" grep-lx.txt

11,删除文件每行的最后一个字符

sed -r"s/(^.)(.*)(.$)/\1\2/" grep-lx.txt

12,删除文件最后一行倒数第二个字符。

sed -r "/$/s/(^.)(.)(.*$)/\1\3/"grep-lx.txt

13,删除文件最后一行倒数第二个单词。

sed -r "/$/s/(^.*)(.* )(.*$)/\1\3/" grep-lx.txt

14,交换文件最后一行的第一个单词和最后一个单词的位置。

 sed -r "/$/s/(^.* )(.*)(.*$)/\3\2\1/" grep-lx.txt

15,删除文件每行里的所有数字。

sed -r"s/[0-9]//g" grep-lx.txt

16,只显示文件最后一行的第一个单词。

sed -r"/$/s/(^[a-Z]* )(.*$)/\1/" grep-lx.txt

17  复制文件中的2-5行到  7行的下方  X

 sed -r "2h;3,5H;7G" grep-lx.txt

18  剪切文件中的5-7行到  9行的下方  X

 sed -r "5h;6,7H;5,7d;9G" grep-lx.txt

19  删除文件所有有数字的行

sed "/[0-9]/d"grep-lx.txt

20  删除文件中每行里的数字

sed"/[0-9]/s/[0-9]//g" grep-lx.txt

21  给文件中每一行里的所有小写字母用小括号括起来

      (a)A(b)C(f)F

 sed -r "s/([a-z])/(\1)/g" grep-lx.txt

22  只删除文件里的偶数行

    sed 'n;d' test.txt

23  不删除文件中有数字的行

sed '/[0-9]/!d'grep-lx.txt

24  把文件每一行里的每一个数字都替换为plj

sed -r 's/[0-9]/plj/g'grep-lx.txt

25  把文件每一行里的数字都替换为TARENA

sed -r 's/[0-9]/TARENA/g'grep-lx.txt

26  把文件每一行里的小写字母都修改为对应的大写字母

sed  's/[a-z]/\U&/g' grep-lx.txt

27  把文件含有数字行里的字母删除。

sed   '/[0-9]/s/[a-Z]//g' text.txt

28  删除文件中有符号的行

Sed ‘/[^0-9a-Z]/d’ a.txt

29  删除文件中有root   daemon 字样的行

sed -r  '/root|daemon/d' test.txt

30  把文件中所有在Ip地址,都修改为192.168.10.254      地址。

 

 

 

1,9*9乘法诀略

#!/bin/bash

for ((x=1;x<=9;x++))

do

       for ((y=1;y<=$x;y++))

       do

       z=`expr $y \* $x`

       echo -n "  $y * $x =  $z "

 

       done

echo

Done

 

 

2,四则运算计算器

#!/bin/bash

sum(){

       add=0

       while [ $# -ge 1 ] ; do

                add=`expr $add + $1`

                shift

       done

       echo " The sum is  $add  "

}

cha(){

                mun=$1

                shift

                 while [ $# -ge 1 ] ; do

                mun=`expr $mun - $1`

                shift

       done

       echo " The cha is  $mun  "

}

shang(){

       mun=$1

       shift

       while [ $# -ge 1 ] ; do

                mun=`expr $mun \/ $1`

                shift

       done

       echo " The shang is $mun  "

}

cheng(){

       mul=$1

       shift

       while [ $# -ge 1 ] ; do

                mul=`expr $mul \* $1`

                shift

       done

       echo " The ji is  $mul  "

}

read -p '请输入你要运算的类型:+ - * / ' X

case $X in

       "+")

                sum $*

                ;;

       "-")

                cha $*

                ;;

       "*")

                cheng $*

                 ;;

       "/")

                shang $*

                 ;;

       *)

                echo "你输入的计算类型错误,不是{+- * /}"

                ;;

esac

 

 

3,每5分钟检测系统跟目录的剩余空间,当剩余空间小于10G时想终端报警。

/bin/bash

let num=0

num=`df -k | head -2 | tail -1 | awk'{print $4}'`   //df -h 结果可能是带小数的数值

num2=`expr 10 \* 1024 \* 1024`

if  [$num -lt $num2 ]; then

       wall "The root Available is lower 10G"

fi

cat <<eof >/var/spool/cron/root

*/5 * * * * root/tmp/homework3/check_root.sh

eof

 

 

4,编写脚本 backup_new_webpage.sh

        每次执行脚本时,只备份网页目录下新产生的网页文件到目录/webbakdir

 

!/bin/bash

cd /webbakdir 2>/dev/null ||mkdir /webbakdir

cd /var/www/html/

for i in `ls -l`

do

if [  ! -e /webbakdir/$i  ];then

cp  $i /webbakdir/

fi

done

 

 

 

 


你可能感兴趣的:(服务器,IP地址,在线服务)