N22-第九周作业

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

#!/bin/bash
#
declare -i log_user
declare -i notlog_user
while read line;do
    usershell=$(echo $line | cut -d: -f7)
    if [[ "$usershell" == "/sbin/nologin" ]];then
        let notlog_user++
    else
        let log_user++
    fi
done < /etc/passwd    
echo "There are $log_user users can log on,$notlog_user users need not log on."

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

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

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

```
#!/bin/bash
#
if fdisk -l | grep "^Disk $1\>" &> /dev/null;then
    fdisk -l $1
else
    echo "This disk is not exists."
fi
```

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

```
#!/bin/bash
#
while true;do
    read -p "please enter a option:" opt
    if [[ $opt == "quit" ]];then
        echo "Exit normally." && exit 0
    elif [[ $opt == "yes" ]];then
        echo "di again."
    else
        exit 2
    fi
done
```

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 [[ $1 == "gzip" ]];then
    tar zcf /backups/etc-20160613.tar.gz /etc/* &> /dev/null
elif [[ $1 == "bzip2" ]];then
    tar jcf /backups/etc-20160613.tar.bz2 /etc/* &>/dev/null
elif [[ $1 == "xz" ]];then
    tar Jcf /backups/etc-20160613.tar.xz /etc/* &>/dev/null
else 
    echo "Wrong zip tools !" && exit 0
fi
```

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

```
#!/bin/bash
#
while true;do
    read -p "Give a dir:" opt
    if [[ -f $opt ]];then
        echo "It is a normal file."
    elif [[ -d $opt ]];then
        echo "It is a directory."
    elif [[ -h $opt ]];then
        echo "It is a sybo link."
    elif [[ $opt == "quit" ]];then
        exit 0
    else 
        echo "can not recognize."
    fi
done
```

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

```
#!/bin/bash
#
hos=$(hostname)
if [[ $hos == "(none)" ]] || [[ $hos == "loaclhost" ]] || [[ $hos == " " ]];then
    hostname mail.magedu.com
else
    hostname
fi
```

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

```
#!/bin/bash
#
if [ $(id -u $1) -eq 0 ];then
    echo "sys admin."
elif [ $(id -u $1) -gt 500 ];then
    echo "normal user."
else
    echo " sys user."
fi
```

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

```
#!/bin/bash
#
read -p "Enter a user:" opt
if [ $(id -u $opt) -ge 500 ] && awk -F: '/$opt/{print $7}' /etc/passwd | grep "sh$" &> /dev/null;then
    echo "User $opt can log system."
else
    echo "$opt can not log on."
fi
```

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

```
#!/bin/bash
#
declare -i i=1
for file in /var/log/*;do
    mkdir /tmp/test$i
    if [[ -d $file ]];then
        cp -r $file /tmp/test$i
        let i++
    elif [[ -f $file ]];then
        cp $file /tmp/test$i
        let i++
    elif [[ -h $file ]];then
        cp -d $file /tmp/test$i
        let i++
    else
        cp -a $file /tmp/test$i
        let i++
    fi
done
```

原创文章,作者:上海-brown,如若转载,请注明出处:http://www.178linux.com/52854

(0)
上海-brown上海-brown
上一篇 2016-10-24 09:11
下一篇 2016-10-24 09:11

相关推荐

  • keepalived+nginx 实现 sharepoint 负载均衡

    keepalived 实现虚拟路由
    nginx 做反向代理和负载均衡

    Linux干货 2017-12-20
  • RAID,pv,vg,lv的实验

    首先在虚拟机中添加5块硬盘,以备实验使用,此实验以sdc,sdd,sde,sdf,sdg硬盘为例:     添加硬盘:(不用重新启动虚拟机读取新添加磁盘)             ~]# echo “- – -” > /sys/class…

    Linux干货 2017-03-19
  • 前两天课程中学到的东西

    一、计算机组成部分 由CPU,存储器和输入输出系统三大部分组成(或者可以说成四大部分) CPU:相当于大脑,用来执行最重要的任务:计算 存储器:相当于身体,为CPU提供计算所需要的所有东西 输入输出设备:四肢,为整个系统提供需要计算的内容,吧需要给供给CPU的东西放入存储器中 二、linux发行版,linux发行版主要有三个大类:debian,slackwa…

    Linux干货 2016-10-30
  • Linux GNU AWK使用

                                    Linux GNU AWK使用 本章内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断…

    系统运维 2016-10-01
  • PHP数组实际占用内存大小的分析

    我们在前面的php高效写法提到,尽量不要复制变量,特别是数组。一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G。下面我们可以粗略的估算PHP数组占用内存的大小,首先我们测试1000个元素的整数占用的内存: <?php      &nb…

    系统运维 2015-05-28
  • bash编程尾声

    数组 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合。 数组名和索引     索引:编号从0开始,属于数值索引     注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引, bash4.0版本之后开始支持。  &nb…

    Linux干货 2016-08-25

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-02 14:43

    博客写得非常的好,32个赞,脚本思路清晰,加油!