选择判断专题脚本编程_第九周练习

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

#!/bin/bash
#
declare -i y=0
declare -i n=0
for i in $(cut -d: -f7 /etc/passwd);do
    if [[ "$i" == "/sbin/nologin" ]];then
        let n++
    else 
               let y++
        fi
done
echo -e "$y users can log in.\n$n users can't log in."

Q2:写一个脚本:

  • (1) 获取当前主机的主机名,保存于hostname_变量中;

  • (2) 判断此变量的值是否为localhost,如果是,则将当前主机名修改为www.magedu.com;

  • (3) 否则,则显示当前主机名;

#!/bin/bash
#
hostname_=$(hostname)
if [[ "$hostname_" == "localhost" ]];then
        hostname www.magedu.com
else
        echo $hostname_
fi

Q3:写一个脚本,完成如下功能:

  • (1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在;

  • (2) 如果存在,则显示此设备上的所有分区信息;

#!/bin/bash
#
[ $# -eq 0 ] && echo -e "At least one  path of block device is needed!\nPlease try again!" && exit 1
for i in $@;do
        if [ -b $i ];then
                fdisk -l $i
        fi
done

Q4:写一个脚本,完成如下功能:

  • 脚本能够接受一个参数;

  • (1) 如果参数1为quit,则显示退出脚本,并执行正常退出;

  • (2) 如果参数1为yes,则显示继续执行脚本;

  • (3) 否则,参数1为其它任意值,均执行非正常退出;

#!/bin/bash
#
read -p "What is your choice?[yes or quit] " var
case $var in
quit)
    echo "Bye~"
    exit 0
    ;;
yes)
    echo "Go on scripts."
    ;;
*)
    echo "Error!"
    exit 1
    ;;
esac

Q5:写一个脚本,完成如下功能:

  • 传递一个参数给脚本,此参数为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
#
time=$(date +%Y%m%d)
read -p "Choose the one to use.[gzip or bzip2 or xz]" var
case $var in
gzip)
        tar -zcf /backups/etc-$time.tar.gz /etc &> /dev/null
        ;;
bzip2)
        tar -jcf /backups/etc-$time.tar.bz2 /etc &> /dev/null
        ;;
xz)
        tar -Jcf /backups/etc-$time.tar.xz /etc &> /dev/null
        ;;
*)
        echo "compress tools error!"
        exit 1
        ;;
esac

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

  • (1) 如果为普通文件,则说明其可被正常访问;

  • (2) 如果是目录文件,则说明可对其使用cd命令;

  • (3) 如果为符号链接文件,则说明是个访问路径;

  • (4) 其它为无法判断;

#!/bin/bash
#
[ $# -eq 0 ] && echo -e "A path needed!\nPlease try again!" && exit 1
if [ -L "$1" ];then
        echo "This is a path to somewhere else~"
elif [ -d "$1" ];then
        echo "This is a directory.Please use command 'cd'."

elif [ -f "$1" ];then
        echo "This file can be read!"
else
        echo "Sorry,unkown!"
fi

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

  • (1) 如果主机名为空或为localhost,或为"(none)",则将其命名为mail.magedu.com;

  • (2) 否则,显示现有的主机名即可;

#!/bin/bash
#
hostname_=$(hostname)
if [ -z "$hostname_" -o "$hostname_" == "localhost" -o "$hostname_" == "localhost.localdomain" ];then
        hostname mail.magedu.com
else
        hostname
fi

Q8:写一脚本,接受一个用户名为参数;

  • (1) 如果用户的id号为0,则显示其为管理员;

  • (2) 如果用户的id号大于0且小于500, 则显示其为系统用户;

  • (3) 否则,则显示其为普通用户;

#!/bin/bash
#
[ $# -eq 0 ] && echo -e "A user name needed!\nPlease try again!" && exit 1
if id $1 &> /dev/null;then
        if [ `id -u $1` -ge 500 ];then
                echo "$1 is a common user."
        elif [ `id -u $1` -ge 1 ];then
                echo "$1 is a system user."
        else
                echo "$1 is a root user."
        fi
else
        echo -e "$1 not exits!\nTry again!"
fi

Q10:写一个脚本,传递一个用户名参数给脚本;

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

  • (2) 否则,则显示无法登录系统;

#!/bin/bash
#
if [ $# -eq 0 ];then
        echo -e "A user needed!\nTry again please!"
        exit 1
fi
if id $1 &> /dev/null;then
        if [ `id -u $1` -ge 500 ] && grep "^$1.*sh$" /etc/passwd &> /dev/null;then
                echo "A user can log system."
        else
                echo "Cannot log system."
        fi
else
        echo "$1 not exits!"
fi

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

  • (1) 按顺序分别复制/var/log目录下的每个直接文件或子目录至/tmp/test1-testn目录中;

  • (2) 复制目录时,才使用cp -r命令;

  • (3) 复制文件时使用cp命令;

  • (4) 复制链接文件时使用cp -d命令;

  • (5) 余下的所有类型,使用cp -a命令;

#!/bin/bash
#
for i in $(ls /var/log);do
        if [ -L $i ];then
                cp -d /var/log/$i /tmp/test1-testn
        elif [ -f $i ];then
                cp /var/log/$i /tmp/test1-testn
        elif [ -d $i ];then
                cp -r /var/log/$i /tmp/test1-testn
        else
                cp -a /var/log/$i /tmp/test1-testn
        fi
done

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

(0)
N24_VCN24_VC
上一篇 2016-12-25
下一篇 2016-12-25

相关推荐

  • N22-第四周博客作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# ll -d  /etc/skel/drwxr-xr-x. 3 root root 74 3月&…

    Linux干货 2016-09-19
  • keepalive配置文件详解

    第一部分:全局定义块 1、email通知。作用:有故障,发邮件报警。 2、Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。 3、花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。 global_defs{ n…

    2017-09-17
  • 由摩根定律引发的思考

    在Linux中,我们常常需要对一些条件进行判断,而对于多个条件的组合判断是基于摩根定律而进行的。所以理解摩根定律对于我们学习条件判断是很有必要的,下面我们就先介绍摩根定律进而引出其在一些具体场景上的应用。   一、摩根定律 在Linux中的条件判断中,摩根定律可以以下式来表示: !( A || B )=!A && !B !( A &…

    Linux干货 2016-08-16
  • 堡垒机-麒麟堡垒机动态口令使用手册

      一.管理员部分 1.在其它-licenses菜单查看动态口令许可是否打开,如果未打开联系厂商重新生成许可   2.找厂商生成密钥文件,密钥文件中包含令牌种子,在其它–动态令牌菜单将密钥文件导入即可看到所有的令牌种子,每个令牌可以绑定给多个用户     3.令牌绑定可以在 资源管理–…

    安全运维 2016-05-29
  • N23-第三周博客作业

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

    Linux干货 2016-12-05
  • xen虚拟化基础篇

    Xen介绍:  xen是一个开放的源代码虚拟机监视器,有剑桥大学研发。它打算在单个计算机上运行多达128个满足特征的操作系统,操作系统必须进行显示地修改("移植")以在Xen上运行(但是提供对用户应用的兼容性)。这使得无需特殊硬件支持,就能达到高性能的虚拟化。 Xen由三部分组成:     第一部分…

    Linux干货 2015-08-26