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

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

#!/bin/bash
m=0
n=0
for i in `awk -F: '{print $NF}' /etc/passwd`
do
  if [[ "$i" = "/usr/sbin/nologin" ]];then
      let m+=1
  else
      let n+=1
  fi
done
echo "the shell is nologin :$m"
echo "the other is :$n"

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

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

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

#!/bin/bash
echo "please input a dev file:" 
read DEV
ls -l /dev|grep $DEV &> /dev/null
if [ $? -eq 0 ];then
  fdisk -l /dev/$DEV
else
  exit 100
fi

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

#!/bin/bash
case $1 in
quit)
    echo "exit this script"
    exit 0
    ;;
yes)
    echo "continue..."
    ;;
*)
   exit 127
    ;;
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
echo "please select one opthion in (gzip/bzip2/xz):"
read OPTION
if [ ! -d /backups/ ];then
    mkdir /backups
fi
case $OPTION 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 cvf /backups/etc-`date +%Y%m%d`.tar /etc/
    xz -z /backups/etc-`date +%Y%m%d`.tar
    ;;
*)
    exit 127
    ;;
esac

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

#!/bin/bash
echo "please input a path"
read PATH
if [ -d $PATH ];then
   echo "This is a directory.You can apply the 'cd' on it."
elif [ -f $PATH ];then
   echo "This a regular file.You can access it normally."
elif [ -L $PATH ];then
   echo "This is a path to others"
else
   echo "Sorry,I can't make it"
fi

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

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

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

#!/bin/bash
echo "please input the username:"
read p
  a=`grep ^"\b${p}\b" /etc/passwd|cut -d: -f3`
echo $a
if [ $a -eq 0 ];then
    echo "hello,administrater"
elif [ $a -gt 0 -a $a -lt 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
echo "please input the username:"
read p
  a=`grep ^"\b${p}\b" /etc/passwd|cut -d: -f3`
echo $a
  s=`grep ^"\b${p}\b" /etc/passwd|awk -F: '{print $NF}' |cut -d"/" -f3`
echo $s
if [ $a -ge 500 -a ${s:0-2} = "sh" ];then
    echo "a user can log system."
else
    echo "login denied"
fi

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

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

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

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-19 17:39

    输入的时候可以直接用read -p ,1题不对