设为首页 收藏本站
查看: 735|回复: 0

shell脚本案例

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-1-26 09:15:08 | 显示全部楼层 |阅读模式
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
8  把文件里的每行输出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





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-169627-1-1.html 上篇帖子: 日志分析邮件报警脚本(crontab */10 * * * *) 下篇帖子: shell编程中for/while循环命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表