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 21:28
下一篇 2017-08-20 22:17

相关推荐

  • 马哥教育网络班21期-第五周课程练习

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; grep ^[[:space:]] /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; egrep "^#[[:space:]]{1,}[[:alnum:]]…

    Linux干货 2016-08-08
  • LVM详解

    目录:  一、概述  二、LVM的相关概念  三、概念图  四、LVM基本操作    1.创建PV    2.查看PV信息    3.创建VG    4.查看VG信息    5.创建LV    6.查…

    Linux干货 2015-09-22
  • 重定向及tr命令详解及其在管道中的使用简述

    一、标准输入和输出及其重定向         1.标准输入指的是来自键盘的输入,通常用0来表示;标注输出是默认输出到当前终端窗口,用1来表示;标准错误输出同样默认输出到当前终端窗口,用2来表示。除标准输出之外,我们还可以通过重定向来更改默认的输入和输出方式。   &nb…

    Linux干货 2016-08-11
  • linux基础命令

            转眼已经过了一周,在南老师的悉心指导下,我学会了一些基础的LINUX命令,下面做一下本周小结。 命令1:tty、who am i、whoami、w 作用:查看当前登录信息            终端传递信息 echo hello &g…

    Linux干货 2017-07-15
  • linux目录基础、简单的命令以及运用linux帮助

    计算机组成及其功能     计算机其实是:接收用户输入指令与数据,经过中央处理器的数据与逻辑单元运算处理后,以产生或存储成有用的信息。所以计算机组成可以分为输入单元、输出单元、CPU(控制单元、算术逻辑单元)、内存     输入单元:包括键盘、鼠标、扫描仪、手写板、触摸屏等;实现…

    Linux干货 2016-09-17
  • Linux basics–part1

    一、计算机的组成及其功能 依据冯·诺依曼体系结构,计算机可分为五大部分,CPU的运算器和控制器、内存、输入、输出。 CPU运算器:计算机中执行各种算术和逻辑运算操作的部件。运算器的基本操作包括加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、比较和传送等操作,亦称算术逻辑部件(ALU)。运算器由算术逻辑单元(ALU)、累加器、状态寄存器、通用寄存…

    Linux干货 2017-07-10

评论列表(1条)

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

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