Linux基础之shell脚本编程(二)

1、写一个脚本,完成以下功能

   (1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;

   (2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;

   (3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;

   (4) 分别统计S开头和K开头的文件各有多少;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #
  4 DIR=/etc/rc.d/rc3.d/
  5 k_start=0
  6 s_start=0
  7 for i in $(ls $DIR)
  8 do
  9   echo $i | grep "^K" &>/dev/null
 10   if [ $? -eq 0 ];then
 11     line=$( wc -l $DIR$i| cut -d" " -f1 )
 12     let k_start++
 13     echo "$i:stop:$line"
 14   else
 15     line=$(wc -l $DIR$i | cut -d" " -f1 )
 16     let s_start++
 17     echo "$i:start:$line"
 18   fi
 19 done
 20 echo "the total files start of k are:$k_start"
 21 echo "the total files start of s are:$s_start"

2、写一个脚本,完成以下功能

   (1) 脚本能接受用户名作为参数;

   (2) 计算此些用户的ID之和;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #
  4 sum=0
  5 if [ $# -gt 0 ];then
  6   for i in $*
  7   do
  8     id $i &>/dev/null
  9     if [ $? -eq 0 ];then
 10       echo "user $i exist "
 11       let sum+=$(id -u $i )
 12     else
 13       echo "user $i not  exist "
 14     fi
 15   done
 16 else
 17   echo "arguments must be great then 0 "
 18   exit 1
 19 fi
 20 echo "the sum of all user id is: $sum"

3、写一个脚本

   (1) 传递一些目录给此脚本;

   (2) 逐个显示每个目录的所有一级文件或子目录的内容类型;

   (3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #
  4 function  dir_count()
  5 {
  6   dir_number=0
  7   file_number=0
  8   cd $1 &>/dev/null
  9   if [ $? -eq 0 ];then
 10     for j in $(ls $1)
 11     do
 12       cd $1$j &>/dev/null
 13       if [ $? -eq 0 ];then
 14         let dir_number++
 15         file_number=$(ls $1$j | wc -l )
 16       else
 17         let file_number++
 18       fi
 19     done
 20    ls $1
 21    echo "in $1 ,total dir number is:$dir_number,total file is: $file_number"
 22    else
 23      echo "$1 is not a directory"
 24   fi
 25 }
 26 
 27 if [ $# -ge 1 ];then
 28   for i in $*
 29   do
 30     dir_count $i
 31   done
 32 else
 33   echo "argument invalid"
 34   exit 1
 35 fi


4、写一个脚本

  通过命令行传递一个参数给脚本,参数为用户名

  如果用户的id号大于等于500,则显示此用户为普通用户;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #
  4 if [ $# -eq 1 ];then
  5   id_number=$(id -u $1 &>/dev/null)
  6   if [ $? -eq 0 ];then
  7     if [ $id_number > 500 ];then
  8       echo "usual user"
  9     else
 10       echo "system user"
 11     fi
 12   else
 13     echo "$1 not exist"
 14   fi
 15 else
 16 echo "argument must be only one"
 17 fi

5、写一个脚本

   (1) 添加10用户user1-user10;密码同用户名;

   (2) 用户不存在时才添加;存在时则跳过;

   (3) 最后显示本次共添加了多少用户;

  1 #!/bin/bash 
  2 #author:BaoZhang
  3 #       
  4 total_user=0
  5 for i in {1..10}
  6 do        
  7   id user$i &>/dev/null
  8   if [ $? -eq 0 ]; then
  9     echo "user$i exist" 
 10     echo "user$i" | passwd --stdin user$i &>/dev/null 
 11     echo "user$i change the password"
 12   else
 13     useradd user$i
 14     echo "user$i" | passwd --stdin user$i &>/dev/null
 15     echo "user$i add finished" 
 16     let total_user+=1
 17   fi  
 18 done
 19 echo "$total_user add"

6、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #
  4 online_number=0
  5 no_online_number=0
  6 for i in 192.168.88.{100..200}
  7 do
  8   ping -c 2 -W 2 $i &>/dev/null
  9   if [ $? -eq 0 ];then
 10     echo "$i is onlline"
 11     let online_number++
 12   else
 13     echo "$i not online"
 14     let no_online_number++
 15   fi
 16 done
 17 echo "$online_number host online,$no_online_number not online "
 18

7、打印九九乘法表;

  1 #!/bin/bash
  2 #author:BaoZhang
  3 #
  4 for((i=1;i<10;i++))
  5 do
  6   for((j=1;j<=i;j++))
  7   do
  8     echo -n "$j*$i=$[ $j * $i ]"
  9     echo -n "  "
 10   done
 11   echo  ""
 12 done
~

原创文章,作者:zhangbao,如若转载,请注明出处:http://www.178linux.com/59460

(0)
zhangbaozhangbao
上一篇 2016-11-17
下一篇 2016-11-17

相关推荐

  • fdisk命令

    fdisk命令用于观察硬盘实体使用情况,也可对硬盘分区。

    2017-12-05
  • 浅谈DNS基本原理以及实现方法(二)

             DNS作为互联网服务的一个基础型服务,了解和掌握DNS服务的原理和配置将是每一个运维人员必备的技能,这就如同闯荡江湖的侠客不但要有的招式,还要懂的运用这些招式的心法一样,接下来我将从DNS的正反向解析、主从同步、子域授权以及Bind view这四个方面来揭开它神…

    Linux干货 2015-12-19
  • Linux高级磁盘管理-RAID管理

    在冯诺依曼体系机构中,输入输出要存储的外部磁盘I/O能力实在太低,尤其是企业面对高并发的访问量,在系统内部需要大量调度磁盘的上的网页文件资源,这些都会产生大量的I/O,一个磁盘的I/O能力不管如何提升毕竟是有线的,尤其是机械硬盘;同时为了保障业务的连续性,磁盘故障时必须提供冗余能力,面对这样的实际需求环境,RAID技术产生了,通过组织磁盘阵列方式提供I/O,…

    Linux干货 2016-09-06
  • varnish浅述

    安装varnish,安装包需要到官网下载http://www.varnish-cache.org/releases/index.html varnish的程序环境: /etc/varnish/varnish.params:配置varnish服务进程的工作特性,例如监听的地址、端口及缓存机制等; /etc/varnish/default.vcl:配置各Chil…

    2016-11-15
  • Linux基础

    Linux入门以及文件重定向、用户管理、软件管理等

    Linux干货 2018-03-17
  • 马哥教育网络班N22期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:是连接两个局域网的基于MAC地址数据存储转发设备,工作于数据链路层集线器:所有端口处于同一个广播域和冲突域中,带宽共享,工作于物理层二层交换机:多端口网桥,一个端口一个冲突域,默认所有端口位于同一个广播域中,可以划分vlan,隔离广播域,带宽独享三层交换机:具有路由功能的二…

    Linux干货 2016-10-19

评论列表(1条)

  • 马哥教育
    马哥教育 2017-04-13 08:57

    赞,几个脚本都写的比较好~~继续加油~