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

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

#!/bin/bash
#
declare -i nologin_user;other_user
all_users=`awk -F':' '{print $1}' /etc/passwd`
for uesr_test in $all_users;do
  if [ /sbin/nologin == awk -F':' '{print $6}' ];then
    nologin_user++
  else
    other_user++
  fi
done
echo "The nologin user is $nologin_user"
echo "The other user is $other_user"

2、写一个脚本

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

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

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

#!/bin/bash
#
hostname=`hostname|cut -d'.' -f1`
[ $hostname == localhost] && hostname=www.magedu.com || echo $hostname

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

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

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

#!/bin/bash
#
if [ $# lt 1 ];then
  echo "At least one device path!"
  exit
else
  for i in $*;do
    if `fdisk -l $i &> /dev/null`;do
      fdisk -l $i | grep ^/dev
    else
      echo "The path $i does not exist!"
    fi
  done
fi

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

   脚本能够接受一个参数;

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

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

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

#!/bin/bash
#
if [ $# -lt 1 ];then
    echo "At lesat one argument."
    exit 0
fi
case $1 in
quit)
    echo "exit..."
    exit 0
    ;;
yes)
    echo "continue..."
    ;;
*)
    exit 1
    ;;
esac

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
#
if [ $# -lt 1 ];then
echo "At lesat one argument in gzip/bzip2/xz"
exit 0
fi
case $1 in
gzip)
    tar -czvf /backups/etc-`date +%Y%m%d`.tar.gz /etc/
    ;;
bzip2)
    tar -cjvf /backups/etc-`date +%Y%m%d`.tar.bz2 /etc/
    ;;
xz)
    tar -cJvf /backups/etc-`date +%Y%m%d`.tar.xz /etc/
    ;;
*)
    echo "Error for tools..."
    exit 1
    ;;
esac

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

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

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

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

   (4) 其它为无法判断;

#!/bin/bash
#
if [ $# -lt 1 ];then
    echo "At lesat one PATH"
    exit 0
fi
if [ -f $1 ];then
    echo "Can be Access!"
elif [ -d $1 ];then
    echo "Can be cd!"
elif [ -L $1 ];then
    echo "A PATH to Access!"
else
    echo "unkown!"
    exit 1
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
else
    echo $HOSTNAME
fi

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

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

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

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

#!/bin/bash
if [ $# -ne 1 ];then
    echo "Input one user"
    exit 0
elif ! id $1 &> /dev/null;then
    echo "Not Exsit user"
    exit 0  
fi

uid01=`grep ^$1 /etc/passwd | awk -F':' '{print $3}'`

if [ $uid01 -eq 0 ];then
    echo "Administrater"
elif [ $uid01 -gt 0 -a $uid01 -lt 500 ];then
    echo "System user"
else
    echo "Common user"
fi

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

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

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

#!/bin/bash
if [ $# -ne 1 ];then
    echo "Input one user"
    exit 0
elif ! id $1 &> /dev/null;then
    echo "Not Exsit user"
    exit 0  
fi

uid01=`grep ^$1 /etc/passwd | awk -F':' '{print $3}'`
sh01=`grep ^$1 /etc/passwd | awk -F':' '{print $7}'`
sh02=${sh01: -2}
if [ $uid01 -eq 0 -a $sh02 == "sh" ];then
    echo "a user can log system."
else
    echo "can not log system."
fi

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

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

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

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

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

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

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

原创文章,作者:N21-孟然,如若转载,请注明出处:http://www.178linux.com/47477

(0)
N21-孟然N21-孟然
上一篇 2016-09-19
下一篇 2016-09-19

相关推荐

  • 创建私有CA

      什么是CA   CA(Certificate Authority)证书颁发机构主要负责证书的颁发、管理以及归档和吊销。证书内包含了拥有证书者的姓名、地址、电子邮件帐号、公钥、证书有效期、发放证书的CA、CA的数字签名等信息。证书主要有三大功能:加密、签名、身份验证。 搭建私有CA 一、搭建CA服务器 1、生成密钥 ( ):表示此命令在子进程中运…

    Linux干货 2017-02-07
  • 文件系统

            文件系统表现为单个统一的层次结构:从目录/开始并通过若干数量的子目录继续向下扩展,/也叫做根目录。这种单一的层次系统和 Windows 的不一样,后者的分区有专门的名字空间。        &n…

    Linux干货 2016-02-28
  • 权限管理

    权限管理 在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。 我们先来看看文件的属性: 权限: r:可获取文件数据(读取文件) w:可修改文件的数据(写入数据) x:可以把此文件提请内核启动为一个进程 (执行) 文件的权限主要针对三类对象进行定义:  owner: 属主, u  grou…

    Linux干货 2016-08-05
  • 推荐-File System manager

    文件系统(File system) :     文件系统概要    文件系统的分类    文件系统的管理工具             mkfs btrfs ext xfs&nbsp…

    Linux干货 2016-03-26
  • CentOS系统启动流程–上

    centos6启动流程 1.加载BIOS的硬件信息,获取第一个启动设备。 2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息 3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱 动所有的硬件设备。 4.核型执行init程序并获取运行信息。 5.Init执行/etc/rc.d/rc.sysinit文件。 6.启动核心的外挂模块(/etc/m…

    Linux干货 2016-09-13
  • Homework Week-3 用户管理

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。  who | cut -f 1 -d \ | uniq “\”后跟一个空格字符 2、取出最后登录到当前系统的用户的相关信息。  who | tail…

    Linux干货 2016-08-24

评论列表(3条)

  • 马哥教育
    马哥教育 2016-09-19 18:08

    1题不对,在仔细看看你的判断条件

    • N21-孟然
      N21-孟然 2016-09-20 09:20

      @马哥教育确实有误,未验证 if [ /sbin/nologin == awk -F’:’ ‘{print $6}’ ];then

  • N21-孟然
    N21-孟然 2016-09-20 09:29

    修改:
    if [ /sbin/nologin == `grep ^$usertest /etc/passwd | awk -F’:’ ‘{print $7}’ ` ];then