脚本编程部分_第十周练习

Q1:写一个脚本:

  • (1) 能接受四个参数:start, stop, restart, status;start: 输出“starting 脚本名 finished.”其余参数类似;

  • (2) 其它任意参数,均报错退出;

    #!/bin/bash
    #
    read -p "The following choices can be allowed.[start/stop/restart/status]" var
    case $var in
    start)
      echo "start $0 finished."
      ;;
    stop)
      echo "stop $0 finished."
      ;;
    restart)
      echo "restart $0 finished."
      ;;
    status)
      echo "status $0 finished."    
      ;;
    *)
      echo -e "Error!\nPlease try again!"
      exit 1
      ;;
    esac

Q2:写一个脚本,判断给定的用户是否登录了当前系统;

  • (1) 如果登录了,则显示用户登录,脚本终止;

  • (2) 每3秒钟,查看一次用户是否登录;

    #!/bin/bash
    #
    [ $# -eq 0 ] && echo -e "A username needed!\nPlease try again!" && exit 1
    while true;do
          if id $1 &> /dev/null;then
                  testuser=$(who | grep "^$1" | cut -d' ' -f1)
                  if [ "$testuser" == "$1" ];then
                          echo -e "$1 logged!\nBye~"
                          break
                  else
                          echo "Please wait for a moment!"
                          sleep 3
                  fi
          else
                  echo -e "$1 not exits!\nPlease try again!"
                  exit 2
          fi
    done

Q3:写一个脚本,显示用户选定要查看的信息;

  • cpu) display cpu info

  • mem) display memory info

  • disk) display disk info

  • quit) quit

  • 非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;

    #!/bin/bash
    #
    cat << EOF
    cpu) display cpu info
    mem) display memory info
    disk) display disk info
    quit) quit
    ==========================================
    EOF
    read -p "Please input your option:" var
    while [ "$var" != "cpu" -a "$var" != "mem" -a "$var" != "disk" -a "$var" != "quit" ];do
          echo -e "Option Error!\ncpu, mem, disk, quit"
          read -p "Please input your option again:" var
    done
    case $var in
    cpu)
          lscpu   ;;
    mem)
          free -m ;;
    disk)
          fdisk -l /dev/[sh]d[a-z]        ;;
    quit)
          echo "Bye~"
          exit 0  ;;
    esac

Q4:写一个脚本:

  • (1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;

  • (2) 提示用户输入一个用户名或输入“quit”退出;

    • 当输入的是用户名,则调用函数显示用户信息;

    • 当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或“quit”;

      #!/bin/bash
      #
      function userinfo
      {
        if id $var &> /dev/null;then
                idnum=$(id -u $var)
                shell_=$(grep "^$var" /etc/passwd | cut -d':' -f7 | cut -d"/" -f3)
                echo -e "$var information\nID: $idnum\nSHELL: $shell_"
        else
                echo -e "$var not exits!\nPlease try again!"
        fi
      }
      while true;do
        read -p "Username needed or COMMAND[quit]:" var
        if [ "$var" == "quit" ];then
                echo "Bye~"
                exit 0
        else
                userinfo $var
        fi
      done

Q5:写一个脚本,完成如下功能(使用函数):

  • (1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;

  • (2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;

  • (3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;

    #!/bin/bash
    #
    function route_cp
    {
          if ! which --skip-alias $var &> /dev/null;then
                  echo "$var not exits!"
                  exit 1
          else
                  path1=$(which --skip-alias $var)
                  [ -d /mnt/sysroot$path1 ] || mkdir -p /mnt/sysroot$path1
                  cp $path1 /mnt/sysroot$path1
          fi
    }
    function library_cp
    {
          for lib in $(ldd `which --skip-alias $var` | grep -Eo "/lib.*[[:space:]]");do
                  path2=$(echo "$lib" | grep -Eo "/.*/")
                  [ -d /mnt/sysroot$path2 ] || mkdir -p /mnt/sysroot$path2
                  [ -f /mnt/sysroot$lib ] || cp $lib /mnt/sysroot$lib
          done
    }
    read -p "Input COMMAND:" var
    route_cp $var
    library_cp $var

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

(0)
N24_VCN24_VC
上一篇 2017-01-01 15:14
下一篇 2017-01-01 22:11

相关推荐

  • RAID简述和Linux软RAID配置

    RAID简述和Linux软RAID配置 PS:仅为课程练习,原理和配置可能有误,仅供参考,谢谢; 1.RAID功能简述     RAID,全称(Redundant Arrays of Inexpensive Disk或Redundant Arrays of Independent Disk),现在一般多用于后面那个称呼,独立磁盘冗余阵列。RAID的基础概念大…

    Linux干货 2016-07-17
  • 开源堡垒机-01-JumpServer的安装

    前段时间曾经用过JumpServer帮助一个客户完成了他的关于堡垒机的需求,由于当时赶进度,没来得及将整个过程记录和完善,现在抽时间慢慢整理下。 1)JumpServer的介绍 Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能。基于ssh协议来管理,客户端无需安装agent。 支持常见系统: Cent…

    Linux干货 2016-07-22
  • linux基础学习第十二天(shell函数、数组以及yum使用及编译安装)

    2016-08-18 授课内容: shell编程基础(select 循环与菜单、函数) yum管理、定制yum仓库 select 循环与菜单         select variable in list       &…

    Linux干货 2016-08-21
  • 文件查找

        Linux上的所有资源都以文件的形式存在,如果是手工查找的话,势必会浪费太多的时间,这里推荐俩款大家用于查找的工具。 文件查找    文件查找经常用到的俩款软件,locate和find    二者区别 locate:1) 非实时查找;    &nbsp…

    Linux干货 2016-08-18
  • rpm软件管理工具详解

    1 Linux软件安装概述 安装程序的方式: 软件包概述 RPM RPM的缺点 RPM包 RPM分包 RPM命令的使用 rpm 包管理 升级注意项 如何安装rpm软件包 如何卸载rpm软件包 如何升级rpm软件包 如何查询rpm软件包 如何查看与rpm包相关的文件和其他信息 如何校验rpm包 RPM的数据库 1 Linux软件安装概述 安装程序的方式: 通用…

    Linux干货 2016-09-06
  • linux系统上的特殊权限SUID,SGID,STICKY

    特殊权限:SUID SGID STICKY     linux的安全上下文:     1.进程以用户的身份运行,进程是发起此用户的代理,因此以此用户的身份和权限完成所有的操作。     2.权限匹配模型:     1)判断进程的属主,是否以被访问的文件属主。如果是,则应用属主权限…

    Linux干货 2016-08-05

评论列表(1条)

  • 马哥教育
    马哥教育 2017-01-04 16:28

    脚本写的很棒,如果可以在多加一些判断条件的话会更好,加油