N21_第09周_shell脚本

作业题目:

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

预置条件:
[root@zhouyong148 N21_09]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mongodb:x:500:500::/home/mongodb:/bin/bash
shell脚本:
[root@zhouyong148 N21_09]# cat N21_09_01.sh 
#!/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 "用户的shell可以登录的有:$loginable个"
echo "不可以登录的用户shell有:$unloginable个"
执行并查看结果:
[root@zhouyong148 N21_09]# sh N21_09_01.sh 
用户的shell可以登录的有:5个
不可以登录的用户shell有:16个

2、写一个脚本
    (1) 获取当前主机的主机名,保存于hostname变量中;
    (2) 判断此变量的值是否为localhost,如果是,则将当前主机名修改为www.magedu.com;
    (3) 否则,则显示当前主机名;

预置条件:
[root@zhouyong148 N21_09]# hostname
zhouyong148
shell脚本:
[root@zhouyong148 N21_09]# vi N21_09_02.sh 
#!/bin/bash
hostname=$(hostname)
if [[ "$hostname" == localhost ]];then
        hostname www.magedu.com
        echo "hostname is: 'www.magedu.com'"
else
        echo "hostname is: $hostname"
fi
运行及查看结果:
[root@zhouyong148 N21_09]# sh N21_09_02.sh 
hostname is: zhouyong148

3、写一个脚本,完成如下功能
    (1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在;
    (2) 如果存在,则显示此设备上的所有分区信息;

[root@zhouyong148 N21_09]# vi N21_09_03.sh 
#!/bin/bash
if [ $# -le 0 ];then
        echo "参数的个数不能为0,请带入参数,例 N21_09_03.sh /dev/DEVICE_NAME"
        exit 1
else
        dev=$1
        if [ -e $dev ];then
                echo "设备信息存在"
                fdisk -l $dev
        else
                echo "This device don't exist"
        fi
fi

4、写一个脚本,完成如下功能
   脚本能够接受一个参数;
   (1) 如果参数1为quit,则显示退出脚本,并执行正常退出;
   (2) 如果参数1为yes,则显示继续执行脚本;
   (3) 否则,参数1为其它任意值,均执行非正常退出;

[root@zhouyong148 N21_09]# vi N21_09_04.sh 
#!/bin/bash
if [ $# -le 0 ];then
        echo "参数个数为空,请输入参数quit|yes"
        exit 1
else
        case $1 in
        quit)
          echo "quiting..."
          exit 0;;
        yes)
          echo "countine...";;
        *)
          echo "error..."
          exit 1;;
        esac
fi
[root@zhouyong148 N21_09]# sh N21_09_04.sh 
参数个数为空,请输入参数quit|yes
[root@zhouyong148 N21_09]# sh N21_09_04.sh yes
countine...
[root@zhouyong148 N21_09]# sh N21_09_04.sh error
error...

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) 其它任意值,则显示错误压缩工具,并执行非正常退出;

[root@zhouyong148 N21_09]# vi N21_09_05.sh
#!/bin/bash
if [ $# -le 0 ]; then
        echo "参数个数不能为空,请输入参数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;;
        easc
fi

6、写一个脚本,接受一个路径参数:
   (1) 如果为普通文件,则说明其可被正常访问;
   (2) 如果是目录文件,则说明可对其使用cd命令;
   (3) 如果为符号链接文件,则说明是个访问路径;
   (4) 其它为无法判断;

[root@zhouyong148 N21_09]# vi N21_09_06.sh
#!/bin/bash
if [ $# -le 0 ];then
        echo "参数个数不能为空,例N21_09_06.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
[root@zhouyong148 N21_09]# sh N21_09_06.sh /home/logCreate.sh 
This file can be access.

7、写一个脚本,取得当前主机的主机名,判断
   (1) 如果主机名为空或为localhost,或为"(none)",则将其命名为mail.magedu.com;
   (2) 否则,显示现有的主机名即可;

[root@zhouyong148 N21_09]# vi N21_09_07.sh
#!/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
[root@zhouyong148 N21_09]# sh N21_09_07.sh 
hostname is: zhouyong148

8、写一脚本,接受一个用户名为参数;
   (1) 如果用户的id号为0,则显示其为管理员;
   (2) 如果用户的id号大于0且小于500, 则显示其为系统用户;
   (3) 否则,则显示其为普通用户;

[root@zhouyong148 N21_09]# vi N21_09_09.sh 
#!/bin/bash
#
if [ $# -le 0 ];then
    echo "Usage:bash N21_09_09.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
[root@zhouyong148 N21_09]# sh N21_09_09.sh root
root is Administrator.
[root@zhouyong148 N21_09]# sh N21_09_09.sh mongodb
mongodb is Common User.

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
[root@zhouyong148 N21_09]# sh N21_09_10.sh 
Usage:bash 9.10.sh username
[root@zhouyong148 N21_09]# sh N21_09_10.sh root
a user can not log system.
[root@zhouyong148 N21_09]# sh N21_09_10.sh mongodb
a user can log system.

11、写一个脚本,完成如下任务 :
   (1) 按顺序分别复制/var/log目录下的每个直接文件或子目录至/tmp/test1-testn目录中;
   (2) 复制目录时,才使用cp -r命令;
   (3) 复制文件时使用cp命令;
   (4) 复制链接文件时使用cp -d命令;
   (5) 余下的所有类型,使用cp -a命令;

[root@zhouyong148 N21_09]# vi N21_09_11.sh 
#!/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
[root@zhouyong148 N21_09]# sh N21_09_11.sh

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

(0)
365365
上一篇 2016-11-14 08:28
下一篇 2016-11-14 08:28

相关推荐

  • 游戏运维工程师

    爱乐盟互动为深圳市政府评定的深圳市重点文化企业,同时为广东省高科技产业商会常务理事单位,注册资金人民币1000万元。公司的原创大型MMORPG网游《王者传说2》为深圳市政府重点支持的网游项目,《王者传说2》将全面领先于国内的同类产品,成为业界新标准的重要网游产品!! 《王者传说2》已进入产品研发的重要阶段。除《王者传说2》,爱乐盟也已经启动了数款全新大型网游…

    Linux干货 2016-10-19
  • LVM——如何让你的磁盘空间可大可小

    逻辑卷管理器(LVM) 允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小 允许在多个物理设备间重新组织文件系统          将设备指定为物理卷          用一个或者多个物理卷来创…

    Linux干货 2016-08-29
  • 第一周总结(linux系统初识和简单命令)

    一、linux操作系统初识         了解操作系统之前我们需要先了解一下计算机的硬件组成,因为操作系统都是运行在硬件之上。遵循冯诺依曼体系,计算机是由控制器、运算器、存储器、输入设备、输出设备五部分组成。对应到我们现在使用计算机上硬件分别为:        &nb…

    Linux干货 2016-12-26
  • HTTP响应连接介绍

    HTTP即超文本传输协议,web站点的实现就是基于HTTP协议得以实现。本文将详细讨论HTTP。 1. HTTP协议版本: HTTP从诞生到现在一共有如下几个版本: HTTP 0.9:是最早的版本,为HTTP的原型版本,其功能非常简陋; HTTP 1.0:此版本增加了很多新特性,如cache,method,MIME等,MIME的出现让网页不再是单纯的纯文本界…

    2017-05-31
  • Linux学习练习及作业&day07-正则表达式&文本处理工具

    第一部分、使用基本的文本处理工具(非grep)练习以下5题。 1、找出ifconfig命令结果中本机的所有IPv4地址     [root@localhost ~]# ifconfig |head -2 |tail -1     …

    Linux干货 2016-08-08
  • shell 编程(一)

    shell脚本编程:  编程语言的分类:根据运行方式    编程运行:源代码->编译器(编译)--程序文件    解释运行:源代码-->运行启动时解释,由解释器边解释运行; 根据其编程过程中功能的实现是调用库还是调用外部的程序文件:   shell脚本编程:      利用系统上的命令编程组件进行编程:   完整的编程:     利用库或编程组件进行编程; …

    Linux干货 2016-12-23

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-16 15:45

    写的很棒,提个小小的意见,命名变量的时候,尽量不要使用系统的已有函数名