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

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 22:16
下一篇 2016-12-25 23:41

相关推荐

  • 马哥教育网络班22期+第2周课程练习

    1.linux上的文件管理类命令有哪些,其常用的使用方法及其相关示例演示    cp  复制文件  :单源;多源(目标必须是目录)        cp  /etc/fstab /tmp/hi.txt     -i 覆盖之前提醒用户确认   …

    Linux干货 2016-08-21
  • 第十八周作业

    1.LNMP架构添加Memcached支持,并验证其缓存结果 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。 Memcached是以守护程序(监听)方式运行于一…

    2017-07-07
  • Linux基础学习总结(六)

    一、完成如下练习 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; vim: cp /etc/rc.sysinit /tmp/rc.sysinitvim/tmp/rc.sysinit:%s@^[[:space:]]\+@#&@g sed: sed “s/…

    Linux干货 2016-10-30
  • 马哥教育网络21期+第三周练习博客

    马哥教育网络21期+第三周练习博客 一.回顾第二周的学习内容 1,Linux上的文件管理类的命令: mkdir:创建目录: [root@localhost ~]# mkdir /tmp/fstab2222 [root@localhost ~]# ls -l /tmp/ total&nbsp…

    Linux干货 2016-07-16
  • 基本脚本编译

                                  …

    2017-08-05
  • 文本处理三剑客-grep及正则表达式初

    什么是正则表达式 基本正则表达式的元字符 扩展正则表达式 grep的基本理解 grep的基本选项 grep的应用实例 什么是正则表达式   正则表达式,又称正规表示法、常规表示法。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式的文本。(…

    Linux干货 2016-08-07