1、计算文档a.txt中的每一行中出现的数字个数并且要计算整个文档中一共出现了几个数字; wc -L 统计最长行的词数;
当然是会要用到了for 循环了,然后每一行来循环判断出数字,然后相加即可;
注释:但是假如在同一行有空格的话,也会当成两端去循环;如下;
for i in `echo -e "12345\nabc def"`; do echo $i;done #本来这是两行显示的,如今却显示出了三行;则不可取;
123456
abc def当然也可以用sed;首先需要打印出总行数,然后来用for循环,用sed来一行 一行的取; 比如3 行内容;
for i in `seq 1 3`;do sed -n "$i"p 2.txt ;done
sdfsdasdf23 12fsdklsl;jdffkl34 2342o 当然用变量传递参数的方式也可以;while read line; do echo $line; done < 2.txt 执行时: sh 21.sh 2.txt
脚本内容如下;
vim 21.sh#!/bin/bashsum=0while read linedo n=`echo line|sed 's#[^0-9]##g'|wc -L` echo $n sum=$[$sum+$n] done < $1 echo "$sum"
注释:需要定义一个sum 值,然后把每段的相加,最后打印出来;
[root@localhost_002 shell100]# sh 21.sh 2.txt 执行;
2 4 4 10 2、假如当前mysql密码为 nihao123! 写脚本检测mysql服务是否正常(比如 可以进入mysql 里 执行 show processlist),并检测当前mysql是主还是从,如果是从,则判断 它 的主是否正常,如果是主,则什么也不做;[root@localhost_002 shell100]# cat 22.sh #!/bin/bashmysql="/usr/local/mysql/bin/mysql -uroot -pnihao123!"if ! $mysql -e "show processlist" > /dev/null 2>&1then echo "msyql service is down;" exitelse $mysql -e "show slave status\G" >/tmp/slave.state 2>/dev/null n=`wc -l /tmp/slave.state|awk '{print $1}'` if [ $n -eq 0 ] then echo "This is master." else echo "This is slave" egrep 'Slave_IO_Running:|Slave_SQL_Running:'|awk -F ': ' '{print $2}' >/tmp.sql if grep -q "No" /tmp/tmp.sql then echo "The is salve is down" fi fifi
注意 分三步:首先通过是否可以执行 show processlist 判断mysql服务是否可用;然后在判断mysql主从,通过打印 show slave status\G 内容写入到一个文件,然后判断这个文件的行数是否等于,如果是主,则没有任何内容,否则就是从; 然后在通过show slave status\G,通过egrep 过滤出来 Slave_IO_Running:和Slave_SQL_Runnning: 打印出第二行,判断是否等于 No ,如果是,则主从已经挂了,可以设置发邮件或告警等操作;
3、判断服务器是否开启 web 服务(80),然后判断是什么服务;是 httpd nginx 或者是其他的什么;
[root@localhost_002 shell100]# cat 23.sh #!/bin/bashn=`netstat -lntp|grep ':80 '|wc -l`if [ $n -eq 0 ]then echo "it not listen port 80"else server=`netstat -lnpt|grep ':80 '|awk -F '/' '{print $2}'|sed 's# ##g'` echo "is is listen port 80 and the service is $server."fi
本题的难点在与如何过滤出来 80 端口 以及 是什么服务;
过滤80端口: netstat -lnpt |grep ':80 '|wc -l
判断是什么服务: netstat -lnpt |grep ':80 '|awk -F '/' '{print $NF}'|sed 's# ##g'
4:某一台机器负载偏高,top查看有很多sh的进程,分析后发现该脚本执行时间过长,写一个shell脚本,批量杀死所有 .sh 的脚本;
[root@localhost_002 shell100]# cat 24.sh #!/bin/bash#!/bin/bashfor pid in `ps aux |grep clearnen.sh |awk '{print $2}'` do echo $pid kill -9 $piddone