马哥教育网络班21期+第9周课程练习

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

#!/bin/bash 
declare -i loginable=0
declare -i unloginable=0
    for i in $(cut -d: -f7 /etc/passwd);do
        if [ $i == /sbin/nologin ];then
            let unloginable++
        else
            let loginable++
        fi
    done
echo "loginable:$loginable"
echo "unloginable:$unloginable"

2、写一个脚本

(1) 获取当前主机的主机名,保存于hostname变量中;
(2) 判断此变量的值是否为localhost,如果是,则将当前主机名修改为www.magedu.com;
(3) 否则,则显示当前主机名;
#!/bin/bash 
hostname=$(hostname)
if [[ "$hostname" == *localhost ]];then
    hostname www.magedu.com   
    echo "hostname is: 'www.magedu.com'"
else
    echo "hostname is: $hostname"
fi

3、写一个脚本,完成如下功能

(1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在;
(2) 如果存在,则显示此设备上的所有分区信息;
#!/bin/bash 
if [ $# -le 0 ];then
    echo "usage:bash 9.3.sh /dev/DEVICE_NAME"
    exit 1
else
    dev=$1
    if [ -e $dev ];then
        fdisk -l $dev
    else
        echo "This device don't exist"
    fi
fi

4、写一个脚本,完成如下功能

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

#!/bin/bash 
if [ $# -le 0 ];then
    echo "usage:bash 9.4.sh quit|yes|..."
    exit 1
else
    case $1 in 
    quit) 
    echo "quiting..."
    exit 0;;
    yes) 
    echo "countine...";;
    *) 
    echo "error..."
    exit 1;;
    esac
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 [ $# -le 0 ];then
    echo "usage:bash 9.5.sh gzip|bzip2|xz|..."
    exit 1
else
    case $1 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 "error..."
    exit 1;;
    esac
fi

6、写一个脚本,接受一个路径参数:

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

#!/bin/bash
#
if [ $# -le 0 ];then
    echo "Usage:bash 9.6.sh /filepath/filename."
    exit 1
fi
if [ -f $1 ];then
    echo "This file can be access."
elif [ -d $1 ];then
    echo "command 'cd' can be use."
elif [ -L $1 ];then
    echo "this is accessable file."
else
    echo "filetype unkonw."
fi

7、写一个脚本,取得当前主机的主机名,判断

(1) 如果主机名为空或为localhost,或为"(none)",则将其命名为mail.magedu.com
(2) 否则,显示现有的主机名即可;

#!/bin/bash
hostname=$(hostname)
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" -o "$HOSTNAME"==*localhost ];then
    hostname mail.magedu.com
    echo "hostname is: 'mail.magedu.com'"
else
    echo "hostname is: $hostname"
fi

8、写一脚本,接受一个用户名为参数;

(1) 如果用户的id号为0,则显示其为管理员;
(2) 如果用户的id号大于0且小于500, 则显示其为系统用户;
(3) 否则,则显示其为普通用户;

#!/bin/bash
#
if [ $# -le 0 ];then
    echo "Usage:bash 9.8.sh username"
    exit 1
fi
if id $1 &> /dev/null;then
    userid=`grep ^$1 /etc/passwd | cut -d: -f3`
    if [ $userid -eq 0 ];then
        echo "$1 is Administrator."
    elif
       [ $userid -gt 0 -a $userid -lt 500 ];then
        echo "$1 is System User."
    else
        echo "$1 is Common User."
    fi
fi

10、写一个脚本,传递一个用户名参数给脚本;

(1) 如果用户的id号大于等于500,且其默认shell为以sh结尾的字符串,则显示“a user can log system.”类的字符串;
(2) 否则,则显示无法登录系统;

#!/bin/bash
#
if [ $# -lt 1 ];then
    echo "Usage:bash 9.10.sh username"
    exit 1
fi
if id $1 &> /dev/null;then
    userid=`grep ^$1 /etc/passwd | grep sh$ | cut -d: -f3`
    if [ $userid -gt 0 -a $userid -eq 500 ];then
        echo "a user can log system."
    else
        echo "a user can not log system."
    fi
fi

11、写一个脚本,完成如下任务 :

(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

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

(0)
上一篇 2016-09-07 09:43
下一篇 2016-09-07 09:43

相关推荐

  • Linux 第二天: (07月22日) Linux入门

    Linux 第二天: (07月22日) Linux入门       root管理员帐户,超级用户,除非必要,不要用root登录 /dev/console 物理终端/dev/tty 虚拟终端, CentOS 6默认6个虚拟终端/dev/pts 模拟终端tty 查看当前终端设备     GUI 图形用户界面 GN…

    Linux干货 2016-08-08
  • 上篇博客简单提了一下Nginx配置文件的大体组成部分,这次来好好解释一下这些个配置文件。 一、main配置段 分类:    正常运行必备的配置    优化性能相关的配置    用于调试及定位问题相关的配置   …

    Linux干货 2016-10-26
  • corosync的高可用——高可用mariadb数据库

    corosync, pacemaker,nfs高可用mariadb 实验环境: 4台CentOS 7 的主机,并关闭的iptalbes和selinux功能 主机1:10.1.43.101 node1 corosync+pacemaker+amp 主机2:10.1.43.102 node2 corosync+pacemaker+amp 主机3:10.1.43….

    Linux干货 2016-11-24
  • 网络管理总结

      在学习Linux的快两个月时间的这个阶段,我们学习到了网络的相关知识,哇,原来我们上网是需要这么多步骤的,玩了这么久的电脑,打开过无数网站还只是停留在以为打开网站只需要点点鼠标的层面,惭愧惭愧。学习了一周,终于了解了一些网络的基层结构和一些网络协议,下面是对这一周所学知识的一些总结,加强记忆和理解。还停留在以为打开一个网站只是动动鼠标…

    2017-09-02
  • sed命令、crontab任务、简单脚本练习(21期网络班第六周博客作业)

    vim使用: 直接使用sed模式空间演示,基本语法与vim命令模式类似(需注意vim默认定界为当前行,一般需要在前面加1,$定界为全文,而sed不需要) 1、 复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;      sed &#03…

    Linux干货 2016-08-22
  • N22-第六周作业

    1、复制/etc/rc.d/init.d/functions文件至/tmp目录,将/tmp/functions文件中 的以至少一个空白字符开头的行的行首加# ~]# cp /etc/rc.d/init.d/functions /tmp~]# vim /tmp/functions %s@^[[:space:]]\+@#@g 2、复制/boot/grub/gru…

    Linux干货 2016-10-17

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-07 22:53

    脚本写得非常的漂亮,思路清晰,需要注意一下脚本的缩进,加油!