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

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

相关推荐

  • Linux之账号管理

    Linux之账号管理 一、新增与删除用户:useradd,相关配置文件,passwd,usermod,userdel 在Linux登录系统时会输入账号和密码,所以创建用户也需要这两个数据。新建用户用useradd命令,密码的给予则用passwd命令。 useradd 1.添加新用户 -u: -u  uid username 创建用户时指定uid(如…

    2017-07-23
  • 高级文件系统管理

    为用户设定配额  执行开始或取消配额:quotaon quotaoff  取消编辑配额:edqouta username  在shell中直接编辑:setquota usename 80000 100000 0 0 /foo  定义原始标准用户 :edquota -p user1 user2 实例如下: 配额的实现 1…

    Linux干货 2017-05-02
  • varnish

    Web Page Cache: squid –> varnish程序的运行具有局部性特征:时间局部性:一个数据被访问过之后,可能很快会被再次访问空间局部性:一个数据被访问时,其周边的数据也有可能被访问到 cache:命中 热区:局部性;时效性:缓存空间耗尽:LRU过期:缓存清理 缓存命中率:hit/(hit+miss)(0,1)页面命中率:…

    Linux干货 2017-05-22
  • grub应用 (Blog 10)

    grub1.x 、grub2.x详解

    2017-11-27
  • 文本处理工具

    文本查看工具 less [les]  查看文件 功能比MORE更强大      -N  显示行号      查看时使用的命令      / OR ? 搜索的内容    搜索关键字 &nbsp…

    Linux干货 2017-04-13
  • Linux下find命令的使用

    为什么要使用find命令?     Linux系统中有着成千上万的文件,如果你想要找到自己想要的文件,一款查找软件是必不可少的,而locate是根据其生成的数据库进行查找,虽然速度会略快,但非实时查找,有些新的文件或目录是匹配不到的,而且locate是模糊匹配,而find命令为实时查找,且为精确匹配,如果你对目录的权限…

    Linux干货 2016-08-18