考试前十题答案

8月17日上课内容

考试题:脚本测试
  • 1、写一个脚本
(1) 接受一个以上文件路径作为参数,一个路径或多个路径作为参数;
(2) 显示每个文件拥有的行数;
(3) 并且说明一共统计了有多少文件,且一共多少行;
#!/bin/bash
# (1) 接受一个以上文件路径作为参数;
# (2) 显示每个文件拥有的行数;
# (3) 总结说明本次共为几个文件统计了其行数;


if [ $# -lt 1 ];then
    echo " $0 PATH1 PATH2.... "
    exit 1
fi

declare -i line
declare -i lines=0
declare -i FILE_NUMS=0
PATH_NUMS=$#

# 这里的注意点在于:使用变量去参数名需要这里来取:${!i} == $1 == 参数1
for i in `seq $PATH_NUMS`; do
        if [ -e ${!i} ];then
            line=$(wc -l ${!i} | cut -d" " -f1)
            lines=$[ $lines+$line ]
            let FILE_NUMS++
            echo -e "\E[1;33m${!i}$line行 \033[0m"

        else
                echo -e "\E[1;31m${!i}不存在 \033[0m"   
        fi

done

echo -e "\E[1;33m一共统计了$FILE_NUMS个文件,一共$lines行 \033[0m" 
  • 2、写一个脚本
(1) 传递两个以上的字符串当作用户名,可以是3个也可以是多个哦,不限于两个哦;
(2) 创建这些用户;且密码同用户名;
(3) 统计一共创建了几个用户;
#!/bin/bash
# (1) 传递两个以上字符串当作用户名;
# (2) 创建这些用户;且密码同用户名;
# (3) 总结说明共创建了几个用户;

if [ $# -lt 2 ];then
    echo "请输入两个以上的用户名作为参数"
    exit 1
fi

declare -i USER_NUMS=0
ARGS=$#

for i in `seq $ARGS`; do

    if id ${!i} &> /dev/null;then

        # 如果用户存在
        echo -e "\E[1;31m用户${!i}存在 \033[0m"

    else

        # 如果用户不存在
        useradd ${!i}
        echo "${!i}" | passwd --stdin ${!i} &> /dev/null
        let USER_NUMS++
        echo -e "\E[1;33m创建用户${!i} \033[0m"
    fi


done
echo -e "\E[1;34m一共创建了$USER_NUMS \033[0m"
  • 3、写一个脚本
(0)给脚本传递两个数值用于指定用户的范围,例如:1 20 则创建20个用户 或 101 200 则创建100个用户
(1)批量新建用户,如:student1---student20, 或 student101---student200; 
(2)密码与用户名相同;
(3)如果用户已经存在就不统计其UID,并给出提示
(4)计算新建用户的UID之和;
#!/bin/bash
# (0)给脚本传递两个数值用于指定用户的范围,例如:1 20 则创建20个用户 或 101 200 则创建100个用户
# (1)批量新建用户,如:student1---student20, 或 student101---student200; 
# (2)密码与用户名相同;
# (3)如果用户已经存在就不统计其UID,并给出提示
# (4)计算新建用户的UID之和;

declare -i ID
declare -i ID_SUM=0

for i in `seq $1 $2`; do

    if id student$i &> /dev/null ;then

        # 如果用户存在
        echo -e "\E[1;31m用户student$i已经存在 \033[0m"

    else
        useradd student$i
        echo "student$i" | passwd --stdin student$i &> /dev/null
        ID=$(id -u student$i)
        ID_SUM=$[ ID_SUM+ID ]
        echo -e "\E[1;34m创建了用户student$i \033[0m"
    fi

done
echo -e "\E[1;33m用户的UID之和为:$ID_SUM \033[0m"
  • 4、写一个脚本
(1)分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的空白行数;
#!/bin/bash
# 分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及空白行数之和;

declare -i Line1=0
declare -i Line2=0


for file in /etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions /etc/fstab; do
    Line1=$[ $Line1+$(egrep "^#" $file | wc -l) ]
    Line2=$[ $Line2+$(egrep "^[[:space:]]*$" $file | wc -l) ]
done


echo -e "\E[1;33m#号开头的行数之和为:$Line1\033[0m"
echo -e "\E[1;31m空白行数之和:$Line2\033[0m"
  • 5、写一个脚本
(1)显示当前系统上所有默认shell为bash的用户的用户名、UID以及此类所有用户的UID之和;
#!/bin/bash


egrep "/bin/bash" /etc/passwd | cut -d: -f1

egrep "/bin/bash" /etc/passwd | cut -d: -f3

declare -i sum=0
for i in `egrep "/bin/bash" /etc/passwd | cut -d: -f3`;do 
    sum=$[ $i+$sum ] 
done  
echo -e "\E[1;33mUID之和为:$sum\033[0m"
  • 6、写一个脚本
(1)使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;
(2)在线的主机使用绿色显示;
(3)不在线的主使用红色显示;
(4)请使用函数完成
#!/bin/bash
# 使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;
# 在线的主机使用绿色显示;
# 不在线的主使用红色显示;


PING(){
    if ping -c1 -w1 172.16.250.$1 &> /dev/null;then

        # 可以ping通
        echo -e "\E[1;32m172.16.250.$1 在线\033[0m"



    else
        # 不能ping通
        echo -e "\E[1;31m172.16.250.$1 不在线\033[0m"
    fi
}

for i in {1..254}; do
    PING $i
done

  • 7、写一个脚本
(1) 添加10用户user1-user10;密码同用户名;
(2) 用户不存在时才添加;存在时则跳过;
(3) 最后显示本次共添加了多少用户;
#/bin/bash
# (1) 添加10用户user1-user10;密码同用户名;
# (2) 用户不存在时才添加;存在时则跳过;
# (3) 最后显示本次共添加了多少用户;
#(4)用函数实现

Adduser(){
    adduser $1 
    echo "$1" | passwd --stdin $1 &> /dev/null
    echo "创建用户$1"
}

USER_COUNT=0

for i in `seq 10`;do

    if id user$i &> /dev/null;then

        continue

    else
        Adduser user$i
        let USER_COUNT++

    fi 

done

echo "create users $USER_COUNT"
  • 8、打印逆序九九乘法表;
给脚本传递一个参数,如果是9那么打印逆序九九乘法表,如果是8那么打印逆序八八乘法表
#!/bin/bash
#打印逆序九九乘法表

declare -i k
k=$1
while [ $k -ge 1 ]; do
        for i in `seq 1 $k| sort -n -r`;do
            echo -n "$i X $k = $[ $i*$k ]  "
        done
        echo ""
        let k--
done
  • 9、写一个脚本
 (1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在;
 (2) 如果存在,则显示此设备上的所有分区信息;如果不存在,则显示设备不存在;
#/bin/bash
 # (1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在;
 # (2) 如果存在,则显示此设备上的所有分区信息;如果不存在,则显示设备不存在;


if [ $# -lt 1 ];then

    echo "please enter /dev/sd[a-z]"
    exit 1

fi

if [ -b $1 ];then

    fdisk -l
else

    echo "设备不存在"

fi
  • 10、写一个脚本
 传递一个参数给脚本,此参数为gzip、bzip2或者xz三者之一;
 (1) 如果参数1的值为gzip,则使用tar和gzip归档压缩/etc目录至/tmp目录中,并命名为/tmp/etc-20170613.tar.gz;
 (2) 如果参数1的值为bzip2,则使用tar和bzip2归档压缩/etc目录至/tmp目录中,并命名为/tmp/etc-20170613.tar.bz2;
 (3) 如果参数1的值为xz,则使用tar和xz归档压缩/etc目录至/tmp目录中,并命名为/tmp/etc-20170613.tar.xz;
 (4) 其它任意值,则显示错误压缩工具,并执行非正常退出;
#/bin/bash
# 传递一个参数给脚本,此参数为gzip、bzip2或者xz三者之一;
# (1) 如果参数1的值为gzip,则使用tar和gzip归档压缩/etc目录至/tmp目录中,并命名为/tmp/etc-20170613.tar.gz;
# (2) 如果参数1的值为bzip2,则使用tar和bzip2归档压缩/etc目录至/tmp目录中,并命名为/tmp/etc-20170613.tar.bz2;
# (3) 如果参数1的值为xz,则使用tar和xz归档压缩/etc目录至/tmp目录中,并命名为/tmp/etc-20170613.tar.xz;
# (4) 其它任意值,则显示错误压缩工具,并执行非正常退出;

if [ $# -lt 1 ];then
        echo "please enter an argument"
        exit 1
fi

if [ "$1" == "gzip" ];then

        tar czvf /tmp/etc-20170813.tar.gz /etc && echo "使用gzip归档"


elif [ "$1" == "bzip2" ];then

        tar cjvf /tmp/etc-20170813.tar.bz2 /etc && echo "使用bzip2归档"

elif [ "$1" == "xz" ];then

        tar Jcf /tmp/etc-20170813.tar.xz /etc && echo "使用xz归档"
else

        echo "压缩错误" 
        exit 1

fi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值