N21沉舟第九周作业

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

方法一:

#!/bin/bash    
    #
    declare -i nologinuser=0
    declare -i loginuser=0
    while read line;do
    if echo $line |grep 'nologin';then
          let nologinuser+=1
    else
         let loginuser+=1
        fi
    done</etc/passwd
    echo "nologinuser:$nologinuser"
    echo "loginuser:$loginuser"
方法二:
    #!/bin/bash
    #
    declare -i nologinuser=0
    declare -i loginuser=0
    while read line;do
     if [ `echo $line|cut -d: -f7` == '/sbin/nologin' ];then
    let nologinuser+=1
    else
     let loginuser+=1
       fi
    done</etc/passwd
    echo "nologinuser:$nologinuser"
    echo "loginuser:$loginuser"

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

#!/bin/bash
#
hostname=$HOSTNAME
if [ $hostname == "localhost" ];then
    HOSTNAME="www.magedu.com"
else
    echo $HOSTNAME
fi

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

        #!/bin/bash        
        #
        read -p "please input a devfile:" devfile
        if [ -e $devfile ];then
             fdisk -l $devfile
        else
            echo "This devfile is not exist"
        fi

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

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "need a argument."
    exit 0
fi
case $1 in 
quit)
  echo "scrpits is quit!"
  exit 0
 ;;
yes)
  echo "scripts is runing"
  ;;
*)
  exit 2
;;
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 [ $# -eq 0 ];then
    echo "please choose one from  gzip,bzip2,xz."
    exit 0
fi
case $1 in 
gzip)
   tar -zcvf  /backups/etc-`date +%Y%m%d`.tar.gz /etc  
 ;;
bzip2)
   tar -jcvf  /backups/etc-`date +%Y%m%d`.tar.gz2 /etc  
  ;;
xz)
   tar -Jcvf  /backups/etc-`date +%Y%m%d`.tar.xz /etc 
;;
*)
   echo "choose a wrong tools."
  exit 2
;;
esac

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

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "please input a file path."
    exit 0
fi
if [ -L $1 ];then
    echo "$1 is a links path."
elif [ -f $1 ];then
    echo "you can visit this file."
elif [ -d $1 ];then
    echo "you can use cd command on $1."
else 
    echo "I don't understand you mean."
fi

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

#!/bin/bash
#
if [-z "$HOSTNAME" -o "
$HOSTNAME"
 == "localhost" -o "$HOSTNAME" == "(none)" ];then
    HOSTNAME="mail.magedu.com"
else
    echo $HOSTNAME
fi

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

        #!/bin/bash        
        read -p "input a user name:" username
        uid=$(grep "^$username" /etc/passwd |cut -d: -f3)
        if [ $uid -eq 0 ];then
        echo "this is root."
        elif [ $uid -gt 0 -a $uid -le 500 ];then
        echo "this is a system user."
        else 
        echo "this is a common user."
        fi

10、写一个脚本,传递一个用户名参数给脚本;
   (1) 如果用户的id号大于等于500,且其默认shell为以sh结尾的字符串,则显示“a user can log system.”类的字符串;
   (2) 否则,则显示无法登录系统;

        #!/bin/bash        
        #
        read -p "input a user name:" username
        uid=$(grep "^$username\>" /etc/passwd |cut -d: -f3)
        usershell=$(grep "^$username\>" /etc/passwd |cut -d: -f7)
        if  
        [ $uid -eq 0 ];then
        echo "this is root."
         elif[ $uid -gt 0 -a $(echo $usershell|grep "sh$") ]
        ;then
               echo "
        a user can log system."
        else
               echo "
        a user 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
#
for i in `ls /var/log`;do
   if [ -L $i ];then
     cp -d /var/log/$i /tmp/test1-testn/
     elif [ -d $i ];then
      cp -r /var/log/$i /tmp/test1-testn/
     elif [ -f $i ];then
      cp /var/log/$i /tmp/test1-testn/
     else
      cp -a /var/log/$i /tmp/test1-testn/
      fi
done

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

(0)
N21-沉舟N21-沉舟
上一篇 2016-08-30 15:48
下一篇 2016-08-30

相关推荐

  • Mairadb

    Mairadb 编译安装Mairadb数据 先下载mariadb的软件包: 将软件包解压缩到/usr/local目录下 ]# tar xf mariadb-5.5.32-linux-x86_64.tar.gz -C /usr/local/ 创建连接 ]# ln -sv maria…

    Linux干货 2016-10-17
  • 九.Linux博客-2016年8月10日脚本、sed、vim

    格式说明: 操作 概念 命令 说明及举例 九 脚本sed、vim sed 文本编辑工具 行编辑器,每次取出一行在内存里处理,处理完成后屏幕打印。完成后再取出一行放到内存里处理,覆盖原来内存中的行,循环。。 sed -n '3d' f1 把文件f1中的第三行删掉并不在屏幕上显示 sed -n…

    Linux干货 2016-08-24
  • 第二周 文件管理

    1.Linux上的文件管理类型命令都有哪些,其常用的使用方法及其相关示例演示 mkdir—— 创建目录  make directory 命令格式——mkdir [OPTION]… DIRECTORY… -p:自动按需创建父目录; -v:verbose,显示详细过程; -m MODE:创建目录直接给定权限,否则是默认权限; 注意:路径基…

    2017-12-10
  • 周期性计划任务Cron详解

    概述 cron 是Linux 或者类 Unix 系统的作业调度程序。利用它,我们可以配置某些命令或者脚本,让命令和脚本在某个设定的时间内周期性地运行。本文主要以描述了 CentOS 6的cron命令的详细知识。 了解cron组件 cron程序由程序包cronie提供,我们可以通过rpm -qi cronie查看cronie的信息。 cron 的组件包括: 1…

    Linux干货 2016-09-18
  • 日志收集工具EFK之fluent部署手稿

    Edit EFK fluent部署安装 1. 环境介绍 Centos 6.5 64bit 2. 安装 td-agent介绍 fluent 考虑到灵活可扩展性,使用Ruby编写,部分功能考虑性能使用C语言编写。普通用户安装操作Ruby daemon还是有一定难度的。考虑到flunt的上手难度, fluent专门发布了稳定发布包,就也是所谓的td-agent. …

    Linux干货 2016-03-24

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-07 22:34

    脚本写得非常的漂亮,思路清晰,需要注意一下脚本的缩进哈,加油!