Linux基础知识——SHELL之循环

1、写一个脚本,判断当前系统用户shell是否都为可登陆shell(即非/sbin/nologin),分别计算两类用户的个数(通过比较字符串实现)

#!/bin/bash
#       check the user could login by default or not,and how many it is 
#       20161211
declare logini
declare nologinj
for ((i=1;i<=$(cat /etc/passwd|wc -l);i++))
do
defaultshell=$(head -$i /etc/passwd|sed '$!d'|cut -d':' -f7)
        if [ $defaultshell == /sbin/nologin ];then
        logini=$(($logini+1))
        else
        nologinj=$(($nologinj+1))
        fi
done
        echo "the default login_user has $logini,the others has $nologinj"

或者

#!/bin/bash
#
#

declare nologini
declare othersj

for ((i=1;i<=$(cat /etc/passwd|wc -l);i++))
do

if [ $(head -$i /etc/passwd|sed '$!d'|sed 's/^.*://') == /sbin/nologin ]
   then
    nologini=$(($nologini+1))
else
    othersj=$(($othersj+1))
fi

done
echo "the default login users is $nologini,the others is $othersj"

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

#!/bin/bash
#   check the $HOSTNAME if it's localhost,then change it to www.mageedu.com ;else display it
#   20161212

hostname=$(hostname)
if [ $hostname == localhost ] ||[ $hostname == localhost.localdomain ]
then 
    hostname "www.mageedu.com"
    echo -e 'I change HOSTNAME is $hostname\n'
else
    echo -e $hostname
fi

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

#!/bin/bash
#       please input a device ,check if it's a block device ,so display the partition
#

read -p "Please input a block device,like:sda、sdb:" device

if [ -b /dev/$device ]
then
        echo "the $device is a block device:/dev/$device;and its partition like:"
        lsblk /dev/$device
else
        echo "$device is not exist!"
fi

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

#!/bin/bash
#       while you input 'quit',the shell exit 0;input 'yes' the shell continue;input other command the shell exit 1
#

read -p "please input yes,quit,*:" l 
case $l in   
        yes)
                echo "the shell end with no error"
                exit 0
        ;;
        quit)
                echo "the shell continue"
                continue
        ;;
        *)
                echo "the shell out within error"
                exit 1
        ;;
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
#       tar /etc/* with bzip2,gzip,xz
#


if [ $# == 0 ]
        then
        echo " you must choose a option(like bzip2,gzip,xz)!"
        else
        case $1 in

        gzip)
                tar -czvf /backups/etc-20161212.tar.gz /etc/*
        ;;
        bzip2)
                tar -P -cjvf /backups/etc-20161212.tar.bz2 /etc/*     
        ;;
        xz)
                tar -Jcvf /backups/etc-20161212.tar.xz /etc/*
        ;;
        esac
        ls -al /backups
fi

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

#!/bin/bash
#   check the file or directory 's type
#   20161213

if [ $# -eq 0 ];then
   echo "you must insert a file or directory!"
elif [ -f $1 ];then
    echo "$1 is a file and you can read/write it"
elif [ -d $1 ];then
    echo "$1 is a directory,you can access it with COMMAND 'cd'"
elif [ -l $1 ];then
    echo "$1 is a link file"
else 
    echo "i can't fond what type it is"
fi

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

同题2

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

#!/bin/bash
#   check the user's type,it's operater or ordinery user
#   20161213

if [ $# -eq 0 ];then
    echo "Please input a username!just one"
elif `id -u $1>>/dev/null 2>&1`;[ $? != 0 ];then
    echo "the user $1 isn't fond" && exit 1
   elif [ `id -u $1` -eq 0 ];then
    echo "$1 is root"
   elif [ `id -u $1` -lt 500 ];then
    echo "$1 is a operator"
   else
    echo "$1 is a user"
   fi

9、写一个脚本,传递一个用户名参数给脚本;如果用户的id号大于等于500,且其默认shell为以sh结尾的字符串,则显示“a user can log system"类的字符串

#!/bin/bash
#   check user's ID greater than 500 and the last two character of the default SHELL is sh
#   20161213


if [ $# -eq 0 ];then
    echo 'Please insert a username!'
elif `id -u $1 >>/dev/null 2>&1`;[ $? != 0 ];then
    echo "The user isn't fond" 
elif [ $(id -u $1) -ge 500 ] && [ $(grep $1 /etc/passwd|sed 's/.*://'|grep -o "sh$") == sh ];then
    echo "The user $1 can login system"
else
    echo "The user'ID is $(id -u $1),the user cannt login"
fi

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

(0)
396064847396064847
上一篇 2016-12-13 14:09
下一篇 2016-12-13 16:59

相关推荐

  • day6作业

    1、创建用户gentoo,附加组为bin和root,默认shell为 /bin/csh,注释信息为"Gentoo Distribution"     2、创建下面的用户、组和组成员关系 名字为admins 的组 用户natasha,使用admins …

    系统运维 2016-08-08
  • Python高阶函数和装饰器

    高阶函数 First Class Object 函数在Python中是一等公民 函数也是对象,可调用(callable)的对象 函数可以作为普通变量、参数、返回值等等 高阶函数 数学概念y=g(f(x)) 在Python中,高阶函数应该满足下列至少一个条件 接受一个或者多个函数作为参数 输出一个函数 计数器 def counter(base): def in…

    Linux干货 2017-10-23
  • DNS服务

    名字解析,DNS服务,实现主从服务器,实现子域

    2018-01-22
  • Linux中的分区管理

    1. 磁盘分区类型 磁盘分区主要分为两种类型: MBR  MBR是一个比较古老的分区类型了,不支持2TB的大硬盘。在磁盘的0磁道0扇区的512字节存放的就是MBR的信息。前446字节为bootloader,后面64字节存放的是分区表,后面2字节存放的是55aa的分区标识符。MBR分区类型最多只能支持4个主分区和扩展分区,其余的分区只能是逻辑分区。 …

    2017-04-22
  • Linux的文件系统架构基础

    前言     当今计算机操作系统来说常见功能主要有:进程调度、内存管理、文件系统管理、网络协议栈支持、驱动程序管理、安全功能等。所有对于我们来讲学习Linux文件系统也是一个十分重要的知识,也是学习Linux的必备基础知识,学习好Linux的文件系统知识也是为接下来学习Linux的其他知识奠定良好的基础 关键词  &n…

    Linux干货 2015-04-16
  • awk实际使用案例

    知识点: 1)数组 数组是用来存储一系列值的变量,可通过索引来访问数组的值。 Awk中数组称为关联数组,因为它的下标(索引)可以是数字也可以是字符串。 下标通常称为键,数组元素的键和值存储在Awk程序内部的一个表中,该表采用散列算法,因此数组元素是随机排序。 数组格式:array[index]=value 1、Nginx日志分析     …

    Linux干货 2017-04-09

评论列表(1条)

  • 马哥教育
    马哥教育 2016-12-16 15:00

    脚本可以先运行下~~第2个脚本,犯了一个强弱引用的错误;第3个脚本,输入 “yes” 和 “quit” 的执行结果和要求不一致;第3个脚本,漏掉了任意项;第7个脚本,建议动手换个方式实现下;等等
    不过整体看下来还是不错的。加油~