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
下一篇 2016-10-24

相关推荐

  • 自制Linux系统

                          自制Linux系统 1、环境准备:         在centos6上添加一块新硬盘,并分区格式化。 &n…

    系统运维 2016-09-21
  • N26-第六周作业

    vim编辑器的使用 编辑模式:默认模式编辑模式–>输入模式;i:insert,在光标所在处输入;a:append,在光标所在处后方输入o:在光标所在处下方打开的一个新行;光标处在行首;I:在光标所在行的行首输入A:在光标所在处的行尾输入;O:在光标所在处的上方打开一个新行; 输入模式–>编辑模式ESC 编辑模式&#8211…

    Linux干货 2017-03-13
  • 循环语句

    冯罗伊曼体系架构 1. 输入设备 2. 输出设备 3. 存储器 4. 运算器 5. 控制器 转义序列:\\, \t , \r , \n , \”,  \’ Python:是动态语言,强类型语言 算数运算符 + – */ % ** /是自然除,//是整除 位运算符 & |  ~  ^  <<  >> 原码 5=&gt…

    Linux干货 2018-03-26
  • nginx学习

    nginx    nginx的核心配置项:        Core functionality:核心配置,Glob配置段            daemon:是否开启为守护进程        &nbs…

    2017-05-08
  • 常用大数据词汇中英文对照表

    A 聚合(Aggregation) – 搜索、合并、显示数据的过程 算法(Algorithms) – 可以完成某种数据分析的数学公式 分析法(Analytics) – 用于发现数据的内在涵义 异 常检测(Anomaly detection) – 在数据集中搜索与预期模式或行为不匹配的数据项。除了“Anomalies”,用来表示异常的词有以下几种:outlie…

    Linux干货 2015-03-10
  • Linux LVM

    Linux LVM 前言     LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。无论在Linux或者其他类似…

    系统运维 2016-04-24

评论列表(1条)

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

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