Linux-Shell语言循环语句练习

一、for循环语句

1、根据姓名列表批量添加用户和删除用户(参考书121--122页)

        1)首先创建用户文件,添加用户名

    vim users.txt

zhangsan

lisi

wangwu

                2)创建创建用户脚本文件

vim useraddfor.sh

       3) 编写批量创建用户的脚本

#!/bin/bash
ulist=$(cat /root/users.txt)
for uname in $ulist
do
useradd $uname
echo "123456" | passwd --stdin $uname &> /dev/null
done

        4)执行脚本文件 

. users.txt

 扩展:

        这里对 . 做出解释其实就是source的代替符号,用来执行脚本,测试脚本,如果要对脚本做出定时执行,和开机执行的话,还是需要添加执行权限(chmod +x 脚本名)

        5)验证用户是否创建成功

cat /etc/passwd

2,根据IP地址列表检查主机状态(参考书122页) 

        1)首先创建用于测试的主机列表文件(ip地址自己根据情况定)

vim  /root/ipadds.txt

192.168.1.1

192.168.1.10

192.168.1.100

127.0.0.1

            2)创建文件脚本

vim /root/chkhosts.sh

           3)编写批量检测主机脚本

#!/bin/bash
hlist=$(cat /root/ipadds.txt)
for ip in $hlist
do
    ping -c 3 -i 0.2 -W 3 $ip &> /dev/null
    if [ $? -eq 0 ]
    then
        echo "host $ip is up."
    else
        echo "host $ip is down."
    fi
done

         4)执行脚本

. chkhosts.sh

二、while循环语句

1、批量添加和删除用户 创建一个20个用户,用户名前缀为stu(参考书124--125页)

        1)创建脚本文件

vim uaddwhile.sh

       2) 编写添加用户脚本

#!/bin/bash
NAMEADD="stu"
i=1
while [ $i -le 20 ]
do
    useradd ${NAMEADD}$i
    let i++
done

        3)执行脚本创建用户

. uaddwhile.sh

        4)查看创建是否创建成功

cat /etc/passwd

         5)可以更改上面的创建用户脚本,将useradd改为userdel进行删除刚刚创建的用户

vim udelwhile.sh

         6)我这里再创建一个文件以免有同学不理解

#!/bin/bash
NAMEDEL="stu"
i=1
while [ $i -le 20 ]
do
    userdel -r ${NAMEDEL}$i
    let i++
done

        7)执行脚本文件删除用户

. udelwhile.sh

 2、猜价格游戏(参考书125--126页)

         1)创建猜游戏价格游戏文件

vim pricegame.sh

        2) 编写猜价格游戏脚本

#!/bin/bash
price=$(expr $RANDOM % 1000)
times=0
echo "商品实际价格范围为0--999,猜猜看是什么?"
while true
do
    read -p "猜输入你猜测的价格数目:" int
let times++
if [ $int -eq $price ] ; then
    echo "恭喜你答对了,实际价格是$price"
    echo "你总共猜了${times}次"
    exit 0
elif [ $int -gt $price ] ; then
    echo "太高了!"
else
    echo "太低了"
fi
done

        3)执行脚本测试

chmod +x pricegame.sh
./gricegame.sh

三、case分支语句

1、检查用户输入的字符类型(参考书128页)

        1)创建脚本文件

vim hitkey.sh

        2)编写脚本内容

#!/bin/bash
read -p "请输入一个字符,并按回车键确认:" key
case "$key" in
[a-Z]|[A-Z])
    echo "您输入的是字母."
;;
[0-9])
    echo "您输入的是数字."
;;
*)
    echo "您输入的是空格,功能键,或者其他字符."
esac

        3)执行脚本测试

. hitkey.sh

 2,编写系统服务脚本(参考书129页)

        1)创建脚本文件

vim mygroq

        2)编写系统服务脚本

#!/bin/bash
case "$1" in
start)
    echo -n "正在启动sleep服务..."
    if sleep 7200 &
then
    echo "OK"
fi
;;
stop)
    echo -m "正在停止sleep服务..."
    pkill "sleep" &> /dev/null
    echo "OK"
;;
status)
    if pgrep "sleep" &> /dev/null ; then
        echo "sleep服务已经启动."
    else
        echo "sleep服务已经停止"
    fi
;;
restart)
    $0 stop
    $0 start
    ;;
*)
    echo "用法:$0 {start|stop|status|restart}"
esac

       3) 执行脚本文件测试 

. myprog

四、上机实验答案(书本131实验案例)

1、编写getarp.sh脚本文件

(1)通过arping命令发送ARP请求,根据反馈结果记录MAC地址。

(2)将网段地址(如192.168.1.)赋值给变量NADD,作为检测地址的前缀。

(3)使用while循环语句,重复检测目标并记录MAC地址,主机地址从1-254。

(4)测试需要打开另一台虚拟机网段在1网段上保证可以ping通,实现实验效果

        1)创建脚本文件 

vi getarp.sh

        2)编写脚本文件 

#!/bin/bash
NADD="192.168.1."
FILE="/etc/ethers"
[ -f $FILE ] && /bin/cp -f $FILE $FILE.old
HADD=1
while [ $HADD -le 4 ]
do
        ping -c 3 -i 0.2 -W 3 ${NADD}${HADD} &> /dev/null
        if [ $? -eq 0 ] ; then
                arp -n | grep ${NADD}${HADD} | awk '{print $1,$3}' >> $FILE
        fi
        let HADD++
done

[root@localhost ~]# chmod +x getarp.sh

[root@localhost ~]# ./getarp.sh                      //执行检测程序

        测试:

cat /etc/ethers 

192.168.1.12 00:0C:29:C3:F8:51

192.168.1.13 00:50:56:C0:00:01

省略....

2、编写scanhost.sh脚本

(1)有很多方法可以检测一个主机是否开启匿名FTP服务,这里采取以wget下载工具访问FTP根目录的方式,若能够成功列表,则视为匿名FTP已开启,否则视为关闭。

(2)通过awk命令过滤出/etc/ethers文件中的所有IP地址,赋值给变量TARGET。

(3)使用for循环语句,读取TARGET变量中的IP地址,重复探测FTP开启情况。‘

(4)测试需要开启另一台虚拟机安装开启vsftp服务

        1)创建脚本文件 

vim scanhost.sh

        2)编写脚本文件 

#!/bin/bash
TARGET=$(awk '{print $1}' /etc/ethers )
echo "ftp-YES"
for IP in $TARGET
do
        wget ftp://$IP/ &> /dev/null
                if [ $? -eq 0 ] ; then
                        echo $IP
                        rm -rf index.html
                fi
done

[root@localhost ~]# chmod +x scanhost.sh

[root@localhost ~]# ./scanhost.sh                     //执行脚本,确认扫描结果

以下主机已开放匿名FTP服务:

192.168.1.12

你可能感兴趣的:(必看Linux自动化管理,linux,运维,服务器)