马哥教育网络班19期+第九周课程练习

1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin),分别这两类用户的个数,通过字符串比较来实现。

#!/bin/bash

for user_shell in `awk -F: '{print $7}' /etc/passwd`;do

     if [ "$user_shell" = "/sbin/nologin" ];then

        echo "`awk -F: '{print $7}' /etc/passwd | grep -c /sbin/nologin` users is nologin"
        break

     elif [ "$user_shell" != "/sbin/nologin" ];then
        echo "`awk -F: '{print $7}' /etc/passwd | grep -cv /sbin/nologin` users is login"

     fi
done

2、写一个脚本
 (1) 获取当前主机的主机名,保存于hostname变量中;
 (2) 判断此变量的值是否为localhost,如果是,则将当前主机名修改为www.magedu.com;
 (3) 否则,则显示当前主机名;

#!/bin/bash

hostname=`hostname`

if [ "$hostname" == "localhost" ];then
        hostname www.magedu.com
else
      hostname
fi

3、写一个脚本,完成如下功能
 (1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在;
 (2) 如果存在,则显示此设备上的所有分区信息;

#!/bin/bash
read -p "please input a block device: " device
case $device in
/dev/[hs]d*)
        echo "`fdisk -l $device`"
;;
*)
        echo "please input a exist block device"
;;
esac

4、写一个脚本,完成如下功能
脚本能够接受一个参数;
 (1) 如果参数1为quit,则显示退出脚本,并执行正常退出;
 (2) 如果参数1为yes,则显示继续执行脚本;
 (3) 否则,参数1为其它任意值,均执行非正常退出;

#!/bin/bash

read -p "please input a word: " i
if  [ $i == "quit" ];then
        echo "ok"
    elif [ $i == "yes" ];then
         echo "please retry"
         read -p "please input a word: " i
      if [ $i == "quit" ];then
         echo "ok"
      else
         echo "error exist"
         exit 1
      fi
    else
         echo "error exist"
         exit 1
    fi

5、写一个脚本,完成如下功能
   传递一个参数给脚本,此参数为gzip、bzip2或者xz三者之一;
   (1) 如果参数1的值为gzip,则使用tar和gzip归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.gz;
   (2) 如果参数1的值为bzip2,则使用tar和bzip2归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.bz2;
   (3) 如果参数1的值为xz,则使用tar和xz归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.xz;
   (4) 其它任意值,则显示错误压缩工具,并执行非正常退出

#!/bin/bash

if  [ ! -e /backups ];then
mkdir /backups
fi

read -p "please choose the Compression tool(gzip|bzip2|xz) " i

case $i in 

gzip)
        tar czvf /backups/etc-20160613.tar.gz /etc
;;

bzip2)
        tar cjvf /backups/etc-20160613.tar.bz2 /etc
;;

xz)
        tar cJvf /backups/etc-20160613.tar.xz /etc
;;

*)
        echo "please choose the correct tools"
        exit 1
;;

esac

6、写一个脚本,接受一个路径参数:
   (1) 如果为普通文件,则说明其可被正常访问;
   (2) 如果是目录文件,则说明可对其使用cd命令;
   (3) 如果为符号链接文件,则说明是个访问路径;
   (4) 其它为无法判断;

#!/bin/bash
read -p "please input something " n

if [ -f $n ];then
   echo "$n can be access"
elif [ -d $n ];then
   echo "$n can be use "cd" command"
elif [ -L $n ];then
   echo "this is a access path"
else
   echo "$n can't be judge" 
fi

7、写一个脚本,取得当前主机的主机名,判断
   (1) 如果主机名为空或为localhost,或为""(none)"",则将其命名为mail.magedu.com;
   (2) 否则,显示现有的主机名即可;

#!/bin/bash
hostname=`hostname`
if [ -z "$hostname" ]||[ $hostname == "localhost" ]||[ $hostname == \"\"\(none\)\"\" ];then
    hostname mail.magedu.com
else
    echo $hostname
fi

8、写一脚本,接受一个用户名为参数;
   (1) 如果用户的id号为0,则显示其为管理员;
   (2) 如果用户的id号大于0且小于500, 则显示其为系统用户;
   (3) 否则,则显示其为普通用户;

#!/bin/bash

if [ $# -eq 1 ] && id $1>/dev/null;then
uid=`grep "$1" /etc/passwd | cut -d: -f3`
 if [ $uid -eq 0 ];then
  echo "this is root"
 elif [ $uid -gt 0 ]&&[ $uid -lt 500 ];then
  echo "this is system user"
 elif [ $uid -gt 500 ];then
  echo "this is normal user"
 fi
 else
  echo "please input the exist username"
fi

9、写一个脚本,传递一个用户名参数给脚本;
   (1) 如果用户的id号大于等于500,且其默认shell为以sh结尾的字符串,则显示“a user can log system.”类的字符串;
   (2) 否则,则显示无法登录系统;

#!/bin/bash

if [ $# -eq 1 ]&&id $1>/dev/null;then
uid=`grep "$1" /etc/passwd | cut -d: -f3`
 if [ $uid -ge 500 ]&& grep "sh$" /etc/passwd>/dev/null;then
        echo "a user can log system"
 else
        echo "the user can't login"
 fi
else
 echo "please input a exist user"
fi

10、写一个脚本,完成如下任务 :
   (1) 按顺序分别复制/var/log目录下的每个直接文件或子目录至/tmp/test1-testn目录中;
   (2) 复制目录时,才使用cp -r命令;
   (3) 复制文件时使用cp命令;
   (4) 复制链接文件时使用cp -d命令;
   (5) 余下的所有类型,使用cp -a命令;

#!/bin/bash

if ! [ -d /tmp/test1-testn ];then
    mkdir -p /tmp/test1-testn
fi
for file in `ls /var/log`;do
    if [ -d $file ];then
        cp -r /var/log/$file /tmp/test1-testn
    elif [ -f $file ];then
        cp  /var/log/$file /tmp/test1-testn
    elif [ -L $file ];then
        cp -d /var/log/$file /tmp/test1-testn
    else
        cp -a /var/log/$file /tmp/test1-testn
    fi
done

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

(0)
N19_leoN19_leo
上一篇 2016-06-30 09:35
下一篇 2016-07-02 10:47

相关推荐

  • 文件通配符与命令行扩展

    * 匹配零个或多个字符 ? 匹配任何单个字符 ~ 当前用户家目录 ~mage 用户mage家目录 ~+ 当前工作目录 ~- 前一个工作目录 [0-9] 匹配数字范围 [a-z] 字母 [A-Z]字母          [a-Z] 会以aAbBcC…小大小大列出,特别要注意 [wang] 匹配列表中的任何的一个字符 [^wang]匹配列表中的所有字…

    2017-11-12
  • N26-博客作业-week9

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # declare -i nologin_num=0,login_num=0 for i in $(cut -d: -f7 /etc/passwd); do if …

    Linux干货 2017-04-01
  • 马哥教育网络班21期+第7周课程练习

    马哥教育网络班21期+第7周课程练习 创建一个10G分区,并格式为ext4文件系统;    a.要求block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl;    b.挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不能更新文件的访问时间戳; #&…

    Linux干货 2016-08-22
  • 马哥教育网络班22期+第6周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 1、vi的基本概念 基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下: 1) 命令行模式command mode) 控制屏幕光标的移…

    Linux干货 2016-09-26
  • N26 第八周作业

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥(network bridge) 网桥工作于物理层与数据链路层,在终端设备较多的局域网中可以用网桥设备将局域网分离为不同的冲突域(collision domain),减少网络冲突,提升网络传输效率 集线器(network hub) 集线器具有多个I/O端口,一个端口的输入信号…

    2017-02-25
  • linux文件管理类命令

    stat、alias、xargs命令使用;(非)字母,(非)数字的表示方法。

    2017-12-11

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-04 14:01

    写的很好,排版也很棒,但是有的题目还是有点小瑕疵,比如第4个,如果用while会不会更好 加油