马哥教育网络班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 09:43
下一篇 2016-09-07 09:43

相关推荐

  • 7-26第三课-帮助和bash基础命令

     命令:     1.获取帮助 内部命令     #help COMMAND     #man COMMAND 外部命令     # COMMAND …

    Linux干货 2016-07-29
  • 26期全程班-第七周博客作业

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; # fdisk /dev/sda # mkf…

    Linux干货 2017-03-17
  • 从Linux小白到大牛——与狼共舞的日子12(下)

    马哥教育网络班21期+第12周课程练习 5、为第4题中的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点; (1)要求使用证书认证,证书中要求使用的国家(CN)、州(HA)、城市(ZZ)和组织(MageEdu); (2)设置部门为Ops,主机名为www2.stuX.com,邮件为admin@stuX.com; 1.CA生成私…

    Linux干货 2016-12-26
  • 马哥教育网络班22期-第3周博客作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@zck ~]# who | cut -d ' ' -f1 | sort -u roo root 2、取出最后登录到当前系统的用…

    Linux干货 2016-08-30
  • grep &&正则表达式&&通配,元字,转义符

    grep 基于正则表达式的查询 1正则表达式: 正则表达式是通过使用特殊的字符所编写的模式,一些字符不表示字符的表面意思,具有控制和通配的功能. 使用正则表达式进行匹配具有两种方法:一是通过使用特殊的元字符进行字符匹配;二是使用次数匹配。 一, 正则表达式的特殊字符(元字符) :  #建议再温习一下之前所学的统通配符,对比一下,防止混淆。 (1)元…

    Linux干货 2016-08-05
  • 运维自动化之系统安装

    自动化安装系统,cobbler的安装使用

    Linux干货 2018-01-15

评论列表(1条)

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

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