马哥教育网络班21期+第9周课程练习

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

#!/bin/bash
while read line; do
    if [[ $line =~ .*/sbin/nologin$ ]]; then
        let i++
    else
        let j++
    fi
done < /etc/passwd
echo "Number of log shell:$j."
echo "Number of nolog shell:$i."

2、写一个脚本

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

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

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

#!/bin/bash
hostname=`hostname`
if [[ $hostname == "localhost" ]]; then
    hostname www.mageud.com && echo "The hostname changed for www.magedu.com"
else
    echo "The hostname is $hostname."
fi

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

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

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

#!/bin/bash
read -p "Please enter a path of device:" path
df $path &> /dev/null
if [ $? -eq 0 ]; then
    parted $path print
else
    echo "$path not exists."
fi

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

脚本能够接受参数;

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

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

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

#!/bin/bash
[ $# -eq 0 ] && echo "Enter something!" && exit 1
case $1 in
quit)
    echo "Quit $0!" && exit 0
    ;;
yes)
    echo "Stay $0! " 
    while true; do
        read -p "Please enter again:" again
        [[ $pathagain == 'quit' ]] && echo "ByeBye!" && exit 0
        [[ $pathagain != 'quit''yes' ]] && echo "Goodbye!" && exit 2
        bash 5.sh $pathagain
    done
    ;;
*)
    echo "Quit!" && exit 2
esac

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

传递一个参数给脚本,此参数为gzip、bzip2或者xz三者之一;

(1) 如果参数1的值为gzip,则使用tar和gzip归档压缩/etc目录至/backups目录中,并命名为/baskups/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
[ $# -eq 0 ] && echo "Enter something!" && exit 1
case $1 in
gzip)
    tar -czf /backups/etc-`date +%Y%m%d`.tar.gz /etc/ &> /dev/null
    echo "tar and gzip finished!"
    ;;
bzip2)
    tar -cjf /backups/etc-`date +%Y%m%d`.tar.bz2 /etc/ &> /dev/null
    echo "tar and bzip2 finished!"
    ;;
xz)
    tar -cJf /backups/etc-`date +%Y%m%d`.tar.xz &> /etc/ /dev/null
    echo "tar and xz finished!"
    ;;
*)
    echo "Wrong tools!"
    exit 3
    ;;
esac

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

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

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

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

(4) 其他则为无法判断;

#!/bin/bash
read -p "Please enter a path of file:" path
if [ -f $path ]; then
    echo "$path is common file.Can access!"
elif [ -d $path ]; then
    echo " $path is directory.Can use cd command!"
elif [ -s $path ]; then
    echo " $path is symbolic."
else 
    echo "Could't know about $path!"
fi

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

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

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

#!/bin/bash
hostname=`hostname`
if [[ -z $hostname || $hostname || "localhost" || $hostname == "(none)" ]]; then
    hostname mail.magedu.com && echo "Changed for mail.magedu.com"
else
    echo " hostname is $hostname."
fi

8、写一个脚本,接受一个用户名为参数;

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

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

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

#!/bin/bash
read -p "Please enter one user:" user
uid=`id -u $user`
if [ $uid -eq 0 ]; then
    echo "$user is adm!"
elif [ $uid -gt 0 -a $uid -lt 500 ]; then
    echo "$user is system user!"
else
    echo "$user is common user!"
fi

10、写一个脚本,传递一个用户名参数给脚本;

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

(2) 否则则显示无法登陆系统;

#!/bin/bash
[ $# -eq 0 ] && echo "Please enter a user!" && exit 1
uid=`id -u $1`
grep "^$1.*sh$" /etc/passwd &> /dev/null
if [ $? -eq 0 -a $uid -le 500 ]; then
    echo "A user can log system."
else
    echo "$1 can't log system."
fi

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

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

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

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

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

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

#!/bin/bash
dir="/var/log/"
des="/tmp/test1-testn"
mkdir $des
for i in `ls $dir`; do
    if [ -d $i ]; then 
        cp -r $dir$i $des/
    elif [ -f $i ]; then
        cp $dir$i $des/
    elif [ -s $i ]; then
        cp -d $dir$i $des/
    else
        cp -a $dir$i $des/
    fi
done

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

赞 (0)
JeasonJeason
上一篇 2016-09-01 08:51
下一篇 2016-09-01 08:51

相关推荐

  • GOPS 2016全球运维大会 上海站

    GOPS 2016全球运维大会 • 上海站已经圆满落幕,最新GOPS大会推荐:GOPS2017全球运维大会 • 深圳站 基本信息: GOPS2017全球运维大会 • 深圳站 时间:2017-04-21 08:00:00 至 2017-04-22 18:00:00结束 地点:深圳    会议规模:5000人 会议详情:http://www.…

    系统运维 2016-09-07
  • Linux的哲学思想第二篇

    Linux的哲学思想 一切皆文件 物理终端 物理终端指的是显示器等硬件终端设备,文件存在于 /dev/console 这个路径下 虚拟终端 虚拟终端指的是在linux命令行连接的终端,文件存在于 /dev/tty# [1,6] 这个路径下 串行终端 指的是使用计算机串行端口连接的终端设备,文件存在于 /dev/ttyS# 这个路径下 伪终端 指的是在Xshe…

    2018-02-26
  • 第三周作业

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

    Linux干货 2017-01-16
  • N25-第七周作业

    第七周 1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@zf ~]# fdisk /dev/sdb Command (m for help): n Command action e extended p primary partit…

    Linux干货 2017-02-24
  • 12压缩与解压

    在Linux系统中压缩、解压以及归档的工具主要有一下几种: file-roller : 这个工具适合在桌面系统下进行解压操作。 compress/uncompress  :这是一个比较老的解压工具,压缩后会添加.Z为后缀 gzip/gunzip : .gz结尾 bzip2/bunzip2 : .bz2 xz/unxz : .xz  zip…

    Linux干货 2016-11-27
  • DNS and Bind

    DNS and Bind      DNS服务器所提供的服务是完成将主机名和转换为IP地址的工作。为什么需要将主机名转换为IP地址的工作呢?这是因为,当网络上的一台客户机访问某一服务器上的资源时,用户在浏览器地址栏中输入的是人类便于识记的主机名和域名。而网络上的计算机之间实现连接却是通过每台计算机在网络中拥有的惟一的IP地址来完…

    Linux干货 2017-06-01

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-07 18:28

    脚本写得非常的漂亮,思路清晰,排版完美,32个赞!