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:49
下一篇 2016-08-30 15:49

相关推荐

  • 软件包管理

    1.程序包管理器 源代码–>目标二进制格式–>组织称为一个或有限几个“包”文件;     安装、升级、卸载、查询、校验 程序包管理器: debian(Ubuntu):dpt,工具:dpkg,程序包以“.deb”结尾 redhat:redhat package manager&nbsp…

    Linux干货 2016-08-21
  • 基于keepalived的VRRP协议实现DR模型下的高可用集群

    基于keepalived的VRRP协议实现DR模型下的高可用集群 环境及配置前提说明 4台虚拟服务器都为centos6.8. 主机1,ip:192.168.25.140 做后端RS1,80端口向外部提供web服务 主机2,ip:192.168.25.141 做后端RS2,80端口向外部提供web服务 ip:192.168.25.142为lo:0接口的VIP地…

    Linux干货 2016-11-07
  • 来两道百度的shell开胃菜

    1、写脚本实现,可以用shell、perl等。在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。 方法1: #!/bin/sh for files in `find /tmp -type f -name "abc*"|h…

    Linux干货 2016-09-19
  • 用户与组

    一、用户与组的概念 1、Linux多用户,多任务的特性    Linux是多用户多任务操作系统,多用户多任务就是可在系统上建多个用户,多个用户可同一时间同一个系统互不影执行的响各自不同的任务。例如linux服务器上有root、www、ftp,四个用户。同一时间内,root用户在查看系统日志,管理维护系统,www用户在修改自己的网页程序,f…

    Linux干货 2016-10-25
  • 压缩与解压

        compress 命令使用“Lempress-Ziv”编码压缩数据文件。compress是个历史悠久的压缩程序,文件经它压缩后,其名称后面会多出”.Z”的扩展名。当要解压缩时,可执         &nbsp…

    2017-08-14
  • Linux磁盘管理实操

    Linux磁盘管理实操 1、创建一个10G分区,并格式为ext4文件系统。 先使用fdisk工具创建一个10G的新分区。使用fdisk打开要创建磁盘分区的物理设备fdisk /dev/sdb,然后使用n指令创建新的分区,分区类型选此处选择为主分区,第一个柱面使用默认的1,最后的柱面,使用+10G这种表示方式,表示创建的分区大小为10G。 创建后可以使用p指令…

    系统运维 2016-12-13

评论列表(1条)

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

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