马哥教育网络班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)
N21_郁蓝N21_郁蓝
上一篇 2016-09-07
下一篇 2016-09-07

相关推荐

  • N27_第六周作业

    请详细总结vim编辑器的使用并完成以下练习题 基本模式:编辑模式(命令模式),输入模式,末行模式 模式转换: 编辑模式–输入模式: i:insert,在光标所在处前方输入 a:append,在光标所在处后方输入 o:在光标所在处的下方新建一行 I:在光标所在行行首输入 A:在光标所在处行尾输入 O:在光标所在处的上方打开一个新行 输入模式&#82…

    Linux干货 2017-10-26
  • class13 shell编程(五)软件包管理(三)

    一、shell编程(五) 位置变量补充 shift (踢掉参数) shift                #! /bin/bashecho "1st arg …

    Linux干货 2016-08-24
  • Linux文件系统:从inode理解软链接与硬链接

    什么是inode? 在Linux磁盘存储文件系统中,我们以块划分磁盘为两部分:超级块(superblock)和数据块(data block);同时划分单文件为用户数据(user data)和元数据(meta data)两个部分。 用户数据记录的是文件的真实内容。比如你的血液、骨骼和各器官等等。 元数据这是附加于文件的属性信息。比如身高、体重、血型和年龄等等。…

    Linux干货 2016-08-07
  • 第五周作业

    1、显示当前系统上root、fedora或user1用户的默认shell; [root@localhost ~]# egrep '^(fedora|root|user1):' /etc/passwd |cut -d: -f1,7 root:/bin/bash user1…

    Linux干货 2017-02-04
  • 如何安装CentOS 6.8 ?

    一 ,首先我要先在虚拟机的平台上搭建一下我们需要的环境。 1,选择创建一个新的虚拟机。之后选择自定义安装。点击下一步 2,选择硬件兼容性workstation12.0,(根据情况你也可以选择下面的几个版本,不过要记得选择版本之后,不能再这个版本以下打开虚拟机) 3,点击下一步选择安装程序光盘映像文件项。点击下一步。 4,之后创建一下用户信息,点击下一步。 5…

    Linux干货 2017-02-14
  • Linux初学笔记(markdown格式)

    Linux基础命令笔记

    Linux干货 2018-03-26

评论列表(1条)

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

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