N25-第9周博客作业

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

#!/bin/bash
# 统计登录用户和非登陆用户的个数
# author: han

declare -i loginnum=0
declare -i nologinnum=0

while read line;do
        if [[ "${line}" =~ "/sbin/nologin" ]];then
                let nologinnum++
        else
                let loginnum++
        fi
done < /etc/passwd

echo "可登录shell用户数: $loginnum"
echo "非登陆sheel用户数: $nologinnum"

执行结果: 
[root@localhost scripts]# bash loginshell.sh
可登录shell用户数: 8
非登陆sheel用户数: 19

验证: 
[root@localhost scripts]# grep "/sbin/nologin$" /etc/passwd | wc -l
19
[root@localhost scripts]# grep -v "/sbin/nologin$" /etc/passwd | wc -l
8

2、写一个脚本

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

#!/bin/bash
#description: 显示当前主机名

hostname=$(hostname)
# 因为默认主机名是"localhost.localdomain",所以做了模式匹配
if [[ "$hostname" =~ "localhost" ]];then
        hostnamectl set-hostname www.magedu.com && echo "主机名已修改"
else
        hostname && echo 主机名未修改""
fi


执行结果: 
[root@localhost scripts]# bash hostname.sh 
主机名已修改
[root@localhost scripts]# hostname
www.magedu.com
[root@www scripts]# bash hostname.sh 
www.magedu.com
主机名未修改

3、写一个脚本,完成如下功能

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

#!/bin/bash
#description: 显示磁盘所有分区信息
#author: han

if [ $# -lt 1 ];then
        echo "请输入一个磁盘路径"
        exit 1
fi

if [ -b $1 ];then
        fdisk -l $1
else
        echo "文件不存在或不是磁盘文件"
fi

执行结果: 
[root@www scripts]# bash disk.sh /dev/sda

磁盘 /dev/sda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a61b9

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1050623      524288   83  Linux
/dev/sda2         1050624   105908223    52428800   83  Linux
/dev/sda3       105908224   126879743    10485760   83  Linux
/dev/sda4       126879744   209715199    41417728    5  Extended
/dev/sda5       126881792   128929791     1024000   82  Linux swap / Solaris
/dev/sda6       128931840   149903359    10485760   83  Linux

[root@www scripts]# bash disk.sh /dddd
文件不存在或不是磁盘文件
[root@www scripts]# bash disk.sh /etc
文件不存在或不是磁盘文件

4、写一个脚本,完成如下功能

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

#!/bin/bash
#description:判断接收的参数,决定下面的行为
#author: han

if [ $# -lt 1 ];then
        echo "请输入一个参数"
        exit 1
fi

case $1 in
quit)
        echo "退出脚本"
        exit 0
        ;;
yes)
        echo "继续执行脚本"
        ;;
*)
        exit 2
        ;;
esac

执行结果:
[root@www scripts]# bash ajust.sh quit
退出脚本
[root@www scripts]# bash ajust.sh yes
继续执行脚本
[root@www scripts]# bash ajust.sh ok
[root@www scripts]#

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
#description: 根据参数选择合适的工具进行归档压缩
#han
[ $# -lt 1 ] && echo "请输入一种压缩工具" && exit 1

if [ ! -d /backups ];then
        mkdir /backups
fi

case $1  in
gzip)
        tar zcf /backups/etc-`date +%Y%m%d`.tar.gz /etc
        ;;
bzip2)
        tar jcf /backups/etc-`date +%Y%m%d`.tar.bz2 /etc
        ;;
xz)
        tar Jcf /backups/etc-`date +%Y%m%d`.tar.xz /etc
        ;;
*)
        echo "错误压缩工具"
        exit 2
esac

执行结果:
[root@www scripts]# bash compress.sh 
请输入一种压缩工具
[root@www scripts]# bash compress.sh ddd
错误压缩工具
[root@www scripts]# bash compress.sh gzip
tar: 从成员名中删除开头的“/”
[root@www scripts]# bash compress.sh bzip2
tar: 从成员名中删除开头的“/”
[root@www scripts]# bash compress.sh xz
tar: 从成员名中删除开头的“/”
[root@www scripts]# ls /backups/
etc-20170220.tar.bz2  etc-20170220.tar.gz  etc-20170220.tar.xz

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

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

#!/bin/bash
#description: 判断文件类型
#author: han

[ $# -lt 1 ] && echo "请输入一个路径参数" && exit 1

#注意对符号链接的判断需放在普通文件前面,否则会被识别为普通文件
if [ -h $1 ];then
        echo "$1是个访问路径"
elif [ -f $1 ];then
        echo "$1可被正常访问"
elif [ -d $1 ];then
        echo "$1可以使用cd命令"
else
        echo "无法判断"
fi

执行结果:
[root@www scripts]# bash filetype.sh 
请输入一个路径参数
[root@www scripts]# bash filetype.sh /etc/inittab 
/etc/inittab可被正常访问
[root@www scripts]# bash filetype.sh /etc/
/etc/可以使用cd命令
[root@www scripts]# bash filetype.sh /etc/sysconfig/selinux 
/etc/sysconfig/selinux是个访问路径
[root@www scripts]# bash filetype.sh /dev/sda
无法判断

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

(1) 如果主机名为空或为localhost,或为”(none)”,则将其命名为mail.magedu.com;
(2) 否则,显示现有的主机名即可;

#!/bin/bash
#descriptions: 判断主机名
#author: han

hostname=`hostname`

if [[ -z "$hostname" ]] || [[ "$hostname" =~ "localhost" ]] || [[ "$hostname" == "(none)" ]];then
        hostnamectl set-hostname mail.magedu.com && echo "主机名已修改"
else
        hostname && echo "主机名未修改"
fi

执行结果:
[root@www scripts]# hostname
mail.magedu.com
[root@www scripts]# bash hostname2.sh 
mail.magedu.com
主机名未修改
[root@www scripts]# hostname localhost.localdomain
[root@www scripts]# bash hostname2.sh 
主机名已修改
[root@www scripts]# hostname
mail.magedu.com  

注意: 
1. centos7 配置该"(none)"时报错, 因为小括号为非法字符
[root@www scripts]# hostname "(none)"
hostname: the specified hostname is invalid
2. 在centos6上运行成功,hostnamectl改为hostname命令即可  
3. 表达式两边需加空格,在这儿浪费了很长时间

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

(1)
oranixoranix
上一篇 2017-03-10
下一篇 2017-03-10

相关推荐

  • 构建NP和NMP

    实验一、构建NP (一)实验布置:两台虚拟机充当代理服务器和后端服务器,一台虚拟机充当客户端。 (二)实验目的:实现NP的搭建。 (三)实验图解: (四)实验步骤: 1、  在后端服务器安装php-fpm文件,修改PHP-FPM的配置文件,vim/etc/php-fpm.d/www.conf文件,如下: listen = 127.0.0.1:900…

    2017-05-07
  • iptables实验3 关于内网外网的地址转换及端口转换

    地址属于内核,而不属于网卡!!!!     网络防火墙的实现(主要是forward链) 172.16.100.68(A)和172.16.100.67(B) 192.168.12.10(B)和192.168.12.77(C)(VNET2) B作为C的网关   配置B主机的网卡一个为192.168.1.72,另一个为172.16.2…

    Linux干货 2016-10-30
  • 高级文件系统管理

    高级文件系统管理 本章内容  设定文件系统配额  设定和管理软RAID设备  配置逻辑卷  设定LVM快照  btrfs文件系统 配置配额系统 综述 • 在内核中执行 • 以文件系统为单位启用 • 对不同组或者用户的策略不同    &nb…

    Linux干货 2016-09-01
  • N25第一周作业-Linux初步认识

    一.描述计算机的组成及其功能。     计算机组成有两部份,一为硬件,二为软件OS         硬件:CPU,负责运算操作。          &…

    Linux干货 2016-12-06
  • Linux计划任务

    Linux任务计划 Linux任务计划、周期性执行任务 未来某一时间点执行一次任务:at,batch 周期性计划任务:crontab     默认执行结果会通过邮件形式发送给用户 本地电子邮件服务 smtp:Simple Mail Transfer Protocol,既简单邮件传输协议,主…

    Linux干货 2016-09-14
  • 根分区伸缩实验

    众所周知LVM是Linux环境下对 磁盘进行管理的一种机制。用户在安装Linux操作系统时,难以分配合适的硬盘空间,当一个分区存放不下某个文件时,这个文件因为文件系统的限制,也不能 跨越多个分区来存放。而遇到出现某个分区耗尽时,只有使用调整分区大小的工具。随着LVM功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方 便…

    Linux干货 2015-05-27