测试脚本

1.写一个脚本

  • (1) 接受一个以上文件路径作为参数,一个路径或多个路径作为参数;
  • (2) 显示每个文件拥有的行数;
  • (3) 并且说明一共统计了有多少文件,且一共多少行;
#!/bin/bash
#
#
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
#
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.写一个脚本

  • (1)给脚本传递两个数值用于指定用户的范围,例如:1 20 则创建20个用户 或 101 200 则创建100个用户
  • (2)批量新建用户,如:student1---student20, 或 student101---student200;
  • (3)密码与用户名相同;
  • (4)如果用户已经存在就不统计其UID,并给出提示
  • (5)计算新建用户的UID之和;
#!/bin/bash
#

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
# 
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.打印逆序九九乘法表;

  • (1)给脚本传递一个参数,如果是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
#

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
#

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

你可能感兴趣的:(测试脚本)