Shell 练习题 21—30,内附答案

来源:互联网 发布:淘宝关注的主播在哪里 编辑:程序博客网 时间:2024/05/17 03:36
21、计算a.txt中每行中出现的数字个数并计算一下整个文档中一共出现了几个数字。例如内容如下:
12aa*lkjskdj
alskdflkskdjflkjj
22、写一个shell脚本,先判断一下你linux的版本和bash版本,然后看看是否需要升级,若是升级,则使用yum直接升级,否则输出一条日志,告之不需要升级。参考信息:我们要保证对应版本的CentOS里的bash版本不低于以下版本。假设我们只判断centos5和centos6两种系统。
- Red Hat Enterprise Linux 7 - bash-4.2.45-5.el7_0.2
- Red Hat Enterprise Linux 6 - bash-4.1.2-15.el6_5.1
- Red Hat Enterprise Linux 5 - bash-3.2-33.el5.1
23、写一个脚本,检测你的网络流量,并记录到一个日志里。需要按照如下格式,并且一分钟统计一次:
2014-09-29 10:11
eth0 input: 1000bps
eth0 output : 200000bps
################
2014-09-29 10:12
eth0 input: 1000bps
eth0 output : 200000bps
24、统计当前通过 80 端口建立连接的进程数量
25、统计当前有多少ip 访问量,包括tcp和udp 协议
26、系统负载很高,通过top以及 ps 查看,是因为cron计划任务在运行一个 cleanmem.sh 的脚本,导致很多 sh 命令在运行,写个脚本,杀死所有的 sh 命令。
27、写脚本,判断Linux服务器是否开启了 web 服务,如果开启了,判断跑的是什么服务,httpd? 还是 nginx?或者其他的服务。
28、加入服务器上跑的是 httpd,写个脚本,每分钟检测一次 httpd 服务是否存在,如果不存在,就启动它。
29、创建一个带删除和添加选项的用户的脚本
- 只支持三个选项 ‘--del’ ‘--add’ --help输入其他选项报错。
- 使用‘--add’需要验证用户名是否存在,存在则反馈存在。且不添加。 不存在则创建该用户,切添加与该用户名相同的密码。并且反馈。
- 使用‘--del’ 需要验证用户名是否存在,存在则删除用户及其家目录。不存在则反馈该用户不存在。
- --help 选项反馈出使用方法
- 支持以,分隔   一次删除多个或者添加多个用户。
- 能用echo $?  检测脚本执行情况  成功删除或者添加为0,报错信息为其他数字。
- 能以,分割。一次性添加或者 删除多个用户。  例如 adddel.sh --add user1,user2,user3.......
- 不允许存在明显bug。

30、计算 100 以内能被 3 整除的数的总和。





21、答案
#!/bin/bash
sum=0
for fline in `cat $1`
do
    i=`echo -n $fline |sed 's/[^0-9]//g'| wc -m`
    echo $i
    sum=$[$sum+$i]
done
echo 'sum:'$sum
echo -n do not output the trailing newline  不输出换行符,即在一行显示。

#!/bin/bash
sum=0
for i in `cat a.txt`; do
    num=`echo $i|grep -o '[0-9]*'`
    len=`expr length "$num"`
    echo $len
    sum=$[$sum+$len]
done
echo "sum:"$sum
22、答案
#!/bin/bash
#name:check_bash
#author: cityzenoldwang
#check bash version

os_version=`cat /etc/issue |grep release | awk '{print $3}'| awk -F '.' '{print $1}'`
bash_version=`rpm -qa bash | awk -F '-' '{print $2"-"$3}' | cut -c1-14`
echo $os_version
echo $bash_version

case $os_version in
  5)
    if [ "$bash_version" == "3.2-33.e15.1" ]
    then
        echo "the bash version is lastest"
    else
        yum update -y bash
    fi
  ;;

  6)
    if [ "$bash_version" == "4.1.2-15.e16_5.1" ]
    then
        echo "the bash version is lastest"
    else
        yum update -y bash
    fi
  ;;

  *)
    echo "can not ge the version"
  ;;
esac

23、 待整理 bc 命令
#! /bin/bash
#monitor average network traffic
#author cityzenoldwang
log=/tmp/netcount.log
while :; do
    echo `date +'%F %T'` >> $log
    sar -n DEV 1 3 > /tmp/nettraffic.log
    receive_packets=`grep 'Average' /tmp/nettraffic.log|grep 'eth0'|awk '{print $5}'`
    transmit_packets=`grep 'Average' /tmp/nettraffic.log|grep 'eth0'|awk '{print $6}'`
    echo "eth0 input: "`echo "$receive_packets"*8|bc`"Kbps" >> $log
    echo "eth0 output: "`echo "$transmit_packets"*8|bc`"Kbps" >> $log
    echo "###########################" >> $log
done

24、netstat -an |grep :80 |grep -ic established
25、netstat -anp |egrep 'tcp|ndp' | awk '{print $5}' | wc -l
26、
#! /bin/bash
# auth: Cityzen Wang
# kill all sh command
for pids in `ps -aux |egrep 'clearmem.sh' | awk '{print $2}'`
do
    kill -9 $pids 
    echo "killed $pid"
done
27、
#! /bin/bash
# name: Cityzen wang
# check web nad service
server=`netstat -lnp |egrep ':80' | awk -F '/' '{print $2}'`
if [ -n "$server" ]
then
    echo "$server is running"
else
    echo "No Web service"
fi
28、
#! /bin/bash
# Check service httpd is running or not, if not, start httpd.
# auth : Cityzen Wang
httpstat=`ps aux |grep httpd|grep -v "grep httpd"`
if [ -n "$httpstat" ]
then
    echo "httpd is running"
else
    /usr/local/apache2/bin/apachectl start
fi

crontab -e
* * * * * /bin/sh /path/filename.sh
29、有点难
#!/bin/bash
# Script function:
# --add :
#     add user[user2,user3,user4...]
# --del :
#     del user[user2,user3,user4...]
# --help:
#     help info
# Writen by Wangxiaoqiang 2014.11.24.

add_user(){
  grep ${key[$i]} /etc/passwd > /dev/null
  if [ $? -eq 0 ]
    then
      echo "User '${key[$i]}' is exist."
    else
      useradd ${key[$i]} > /dev/null
      echo $1 | passwd --stdin ${key[$i]} > /dev/null
      echo "Create User '${key[$i]}' Success."
  fi
}
del_user(){
   grep ${key[$i]} /etc/passwd > /dev/null
   if [ $? -eq 0 ]
     then
       userdel -r ${key[$i]}
       echo "Delete user '${key[$i]}' Success."
     else
       echo "User '${key[$i]}' does not exist."
   fi
}

help_user(){
   echo "--add
                Add a user or multiple users,[user1,user2,user3...]"
   echo "--del
                Del a user or multiple users,[user1,user2,user3...]"
   echo "--help
                Help information"
   echo "--version 1.1
                Writen by Wangxiaoqiag 2014-11-24.
                Thanks"
}
if [ $# -eq 0 ]
  then
    echo "Usage: $0 [--add|--del|--help] [user1,user2,user3...]"
    exit 1
fi

case $1 in
  --add)
    if [ $# -eq 1 ]
      then
        echo "Please input username."
        exit 2
      else
        key=(`echo $* | sed 's/,/ /g'`)
        length=${#key[@]}
        for ((i=1;i<$length;i++))
          {
            add_user ${key[$i]}
        }
    fi
    ;;
  --del)
    if [ $# -eq 1 ]
      then
        echo "Please input username."
        exit 2
      else
        key=(`echo $* | sed 's/,/ /g'`)
        length=${#key[@]}
        for ((i=1;i<$length;i++))
          {
            del_user ${key[$i]}
        }
    fi
    ;;
 --help)
    if [ $# -eq 1 ]
      then
        clear
        help_user
      else
        echo "Please input $0 --help"
    fi
    ;;
       *)
    echo "Usage: $0 [--add|--del|--help] [user1,user2,user3...]"
    ;;
esac
30、
#!/bin/bash
# Test script.
# Writen by Wangxiaoqiang 2014-11-24.

SUM=0
for i in `seq 1 100`
  do
     if [ `expr $i % 3` -eq 0 ]
       then
         SUM=$(expr $i \+ $SUM)
     fi
done

echo $SUM

# End

0 0