马哥教育网络班19期+第九周课程练习

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

#!/bin/bash

for user_shell in `awk -F: '{print $7}' /etc/passwd`;do

     if [ "$user_shell" = "/sbin/nologin" ];then

        echo "`awk -F: '{print $7}' /etc/passwd | grep -c /sbin/nologin` users is nologin"
        break

     elif [ "$user_shell" != "/sbin/nologin" ];then
        echo "`awk -F: '{print $7}' /etc/passwd | grep -cv /sbin/nologin` users is login"

     fi
done

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

#!/bin/bash

hostname=`hostname`

if [ "$hostname" == "localhost" ];then
        hostname www.magedu.com
else
      hostname
fi

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

#!/bin/bash
read -p "please input a block device: " device
case $device in
/dev/[hs]d*)
        echo "`fdisk -l $device`"
;;
*)
        echo "please input a exist block device"
;;
esac

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

#!/bin/bash

read -p "please input a word: " i
if  [ $i == "quit" ];then
        echo "ok"
    elif [ $i == "yes" ];then
         echo "please retry"
         read -p "please input a word: " i
      if [ $i == "quit" ];then
         echo "ok"
      else
         echo "error exist"
         exit 1
      fi
    else
         echo "error exist"
         exit 1
    fi

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  [ ! -e /backups ];then
mkdir /backups
fi

read -p "please choose the Compression tool(gzip|bzip2|xz) " i

case $i in 

gzip)
        tar czvf /backups/etc-20160613.tar.gz /etc
;;

bzip2)
        tar cjvf /backups/etc-20160613.tar.bz2 /etc
;;

xz)
        tar cJvf /backups/etc-20160613.tar.xz /etc
;;

*)
        echo "please choose the correct tools"
        exit 1
;;

esac

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

#!/bin/bash
read -p "please input something " n

if [ -f $n ];then
   echo "$n can be access"
elif [ -d $n ];then
   echo "$n can be use "cd" command"
elif [ -L $n ];then
   echo "this is a access path"
else
   echo "$n can't be judge" 
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 [ $# -eq 1 ] && id $1>/dev/null;then
uid=`grep "$1" /etc/passwd | cut -d: -f3`
 if [ $uid -eq 0 ];then
  echo "this is root"
 elif [ $uid -gt 0 ]&&[ $uid -lt 500 ];then
  echo "this is system user"
 elif [ $uid -gt 500 ];then
  echo "this is normal user"
 fi
 else
  echo "please input the exist username"
fi

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

#!/bin/bash

if [ $# -eq 1 ]&&id $1>/dev/null;then
uid=`grep "$1" /etc/passwd | cut -d: -f3`
 if [ $uid -ge 500 ]&& grep "sh$" /etc/passwd>/dev/null;then
        echo "a user can log system"
 else
        echo "the user can't login"
 fi
else
 echo "please input a exist user"
fi

10、写一个脚本,完成如下任务 :
   (1) 按顺序分别复制/var/log目录下的每个直接文件或子目录至/tmp/test1-testn目录中;
   (2) 复制目录时,才使用cp -r命令;
   (3) 复制文件时使用cp命令;
   (4) 复制链接文件时使用cp -d命令;
   (5) 余下的所有类型,使用cp -a命令;

#!/bin/bash

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

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

(0)
N19_leoN19_leo
上一篇 2016-06-30 09:35
下一篇 2016-07-02

相关推荐

  • 编译安装Linux内核

    实验前准备:在https://www.kernel.org/下载内核 这里我们下载的是:linux-4.14.10.tar.xz du -sh /app/linux.tar/ 此命令可查看内核文件大小 编译完成后/lib/modules下会生成4.14.10版的内核 1,tar xvf linux-4.14.10.tar.xz -C /app/解压缩准备好的…

    2018-01-03
  • shell脚本编程练习

    1、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态 在线的主机使用绿色显示 不在线的主使用红色显示 #!/bin/bash # for i in {1..254};do if ping -c 6 -w 1 192.168.1.$i &> /dev/null;then echo -e…

    2017-11-15
  • 2016-08-12作业

    1、查找/var 目录下属主为root ,且属组为mail 的所有文件 [root@localhost bin]# find /var -user root -group mail /var/spool/mail /var/spool/mail/root   2、查找/var 目录下不属于root 、lp 、gdm 的所有文件 find /var …

    Linux干货 2016-08-15
  • 文件查找

    文件查找: locate查找:     locate:     依赖于事先构建好的索引库,操作系统刚完成没有       系统自动实现(周期性任务);      &nbs…

    Linux干货 2016-08-15
  • 双主模型的lvs-dr高可用负载均衡集群

    实验目的:使用keepalived实现lvs-dr模型双主高可用集群 实验环境:两台virtual server(实现lvs的双主)、两台real server(安装web service,用于负载均衡)、一台clietn用于验证结果 注意:为了不影响实验结果,在实验开始前先关闭iptables和selinux 操作步骤: 一、配置IP 1.配置A主机的IP…

    2017-05-13

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-04 14:01

    写的很好,排版也很棒,但是有的题目还是有点小瑕疵,比如第4个,如果用while会不会更好 加油