bash脚本编程实例

bash脚本编程实例

  • 1.写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态

    • 在线的主机使用绿色显示
    • 不在线的主机使用红色显示

      #!/bin/bash
      for i in {1..254};do
       if /bin/ping -W 1 -c 1 172.16.250.${i} >> /dev/null;then
           echo -e "\033[32m 172.16.250.${i} \033[0m"
       else
           echo -e "\033[31m 172.16.250.${i} \033[0m"
       fi
      done
  • 2.如何给网络端口配置多个地址,有哪些方式?

    • ifconfig IFACE_LABEL IPADDR netmask NETMASK
    • ip addr add IFADDR dev IFNAME label LABEL
    • cp /etc/sysconfig/network-scripts/ifcfg-IFACE /etc/sysconfig/network-scripts/ifcfg-IFACE_LABEL,然后修改该配置文件

      BOOTPROTO=none(必须设置为静态)
      DEVICE=IFACE_LABEL
      IPADDR=ip
      NETMASK=netmask
      GATEWAY=dateway
  • 3.写一个脚本,完成一下功能

    • 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头和S开头的文件若干
    • 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串
    • 显示所有以S开头的文件的文件名,并且给其附加一个start字符串

      #!/bin/bash
      for i in $(ls /tmp/njy/files/|grep "^s")
      do
       echo "${i} start"
      done
      
      for i in $(ls /tmp/njy/files/|grep "^k")
      do
       echo "${i} stop"
      done
  • 4.写一个脚本,完成以下功能

    • 脚本能接受用户名作为参数
    • 计算此些用户的ID之和

      #!/bin/bash
      echo -n "please input some usernames:"
      read -a usernames
      
      while true;do
      if [ ${#usernames[*]} -eq 0 ];then
      echo -n  "please input some usernames again:"
      read -a usernames
      else
      break
      fi
      done
      declare -i sum=0
      declare -i count=0
      for i in ${usernames[*]};do
       if !id $i &>> /dev/null;then
           echo "$i is not existing."
           continue
       else
          sum+=$(id -u $i)
          count+=1
       fi
      done
      echo "$count users id count is: $sum"
  • 5.写一个脚本

    • 传递一些目录给此脚本
    • 逐个显示每个目录的所有一级文件或者子目录的内容类型
    • 统计一个有多少个目录,并且一共显示了多少个文件的内容类型

      #!/bin/bash
      #
      read -p "please input some paths:" paths
      
      while true;do
       if [[ -z $paths ]];then
           read -p "please input some paths again:" paths
       else
           break
       fi
      done
      
      for i in $paths;do
        if [[ ! -e $i ]];then
            continue
        else
            pathfiles=$(ls -l $i|grep -v "^d"|awk -F' ' '{print $9}'|sed "/^$/d;s#^#$i/#")
            pathdirs=$(ls -l $i|grep "^d"|awk -F' ' '{print $9}|sed "/^$/d;s#^#$i/#"')
            if [ ${#pathfiles} -ge 1 ];then
                echo "file types and count below $i are:"
                file $pathfiles|cut -d: -f2|sed 's/^[[:space:]]*//g'|tr '\n' ';'|awk -F';' '{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count) {print i,count[i]}}'
            else
                echo "there is no file belowing $i."
            fi
      
            if [ ${#pathdirs} -ge 1 ];then
                echo "dir types and count below $i are:"
                file $pathdirs|cut -d: -f2|sed 's/^[[:space:]]*//g'|tr '\n' ';'|awk -F';' '{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count) {print i,count[i]}}'
            else
                echo "there is no dir belowing $i."
            fi
        fi
      done
  • 6.写一个脚本

    • 通过命令行传递一个参数给脚本,参数为用户名
    • 如果用户的id号大于等于500,则显示此用户为普通用户

      #!/bin/bash
      if [ $# -eq 0 ];then
       echo "need a user."
       exit 1
      fi
      
      id1=$(id -u $1)
      
      if [ $id1 -ge 500 ];then
        echo "this is a common user."
      else
        echo "this is system user or root user."
      fi
  • 7.写一个脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来

    #!/bin/bash
      for i in {20..100};do
          if /bin/ping -W 1 -c 1 172.16.250.${i} >> /dev/null;then
              echo  "172.16.250.${i}"
          else
              continue
          fi
      done
  • 8.打印九九乘法表

    #!/bin/bash
      for i in {1..9};do
          for ((j=1;j<=i;j++));do
               echo -e -n "${i}x${j}=$[$i*$j]\t"
          done
          echo
      done

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

(0)
N27_xiaoniN27_xiaoni
上一篇 2017-08-20
下一篇 2017-08-20

相关推荐

  • iptables/netfilter从入门到进阶(Blog 17)

    博客作业:iptables/netfilter入门到进阶;

    2017-12-20
  • 20170714上课LINUX入门

    1、安装centos6.9和centos7.3时的分区情况 /dev/sda1 mount /boot 1G – 主分区/dev/sda2 mount / 50G -主分区/dev/sda3 mount /app 40G -主分区/dev/sda4 1k 扩展分区/dev/sda5 swap 2G -逻辑分区(swap分区的大小一般为物理内存的2…

    Linux干货 2017-07-15
  • 第一周博客作业

    1、描述计算机的组成及其功能。
    2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。
    4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的。
    6、请罗列Linux发行版的基础目录名称命名法则及功用规定

    Linux干货 2018-03-13
  • linux全方位掌握一个命令–思路比方法更重要

    Linux命令众多,当不清楚一个命令的使用方法时,我们该怎样了解命令的属性和帮助? 1.  用type命令了解一个命令的属性 [root@zejin240 testdir]# type cdcd is a shell builtin[root@zejin240 testdir]# type rmrm is aliased to `rm -i&#03…

    Linux干货 2016-10-30
  • Linux用户和组的配置相关文件

    Linux用户和组的配置相关文件     在linux下,用户的相关配置文件一般是放在/etc目录下,此文主要对以下几个配置文件作介绍:/etc/passwd;/etc/shadow;/etc/group;/etc/gpasswd   一、/etc/passwd:此目录下放的是用户的属性信息,包括组名、UID、GID等,它格式固…

    Linux干货 2016-10-30
  • Linux中的文件查找和解压缩

         Linux的文件查找 概述:      本章将主要介绍在Linux中怎样查找文件和解压缩。需要我们掌握的知识有:locate和find 命令的使用,以及如何使用压缩和解压缩工具。 一、Linux文件查找      在文件系统上常常需要根据文件的各种属…

    Linux干货 2016-09-01

评论列表(1条)

  • 马哥教育
    马哥教育 2017-09-02 20:49

    脚本是运维的必备技能 也是运维自动化的切入点。作业完成 的非常 不错,再接再励。