Linux-Shell语言循环语句练习

简介: 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) 编写添加用户脚本

1. #!/bin/bash
2. NAMEADD="stu"
3. i=1
4. while [ $i -le 20 ]
5. do
6.     useradd ${NAMEADD}$i
7. let i++
8. 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)执行脚本测试

1. chmod +x pricegame.sh
2. ./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

目录
相关文章
|
5月前
|
存储 运维 Shell
shell中for while until 三种循环的用法
shell编程中,有几种常见的循环结构,包括for循环、while循环和until循环,总的来说,循环shell编程中扮演着至关重要的角色,它们使得自动化任务变得更加容易,提高了效率,并且可以处理各种各样的编程需求。
297 13
shell中for while until 三种循环的用法
|
5月前
|
人工智能 机器人 Shell
【shell】shell条件判断、循环语句、基本运算符
【shell】shell条件判断、循环语句、基本运算符
|
3月前
|
Shell 测试技术 Linux
Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值
Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值
37 3
|
4月前
|
Shell UED Python
Shell 循环语句:重复任务的自动化利器
在Shell脚本中,循环语句如`while`和`for`是自动化任务的关键。`while`循环在条件满足时执行,例如计算1到100的和;`for-in`循环遍历列表,可用于迭代指定数值或命令输出,如求1到100的和。`select-in`循环提供交互式菜单,增强脚本用户体验。理解并运用这些循环能提升脚本效率和可读性。现在,动手试试吧!
41 2
|
4月前
|
Shell Linux
shell循环读文件 Linux脚本读文件
shell循环读文件 Linux脚本读文件
35 3
|
4月前
|
机器学习/深度学习 Shell Linux
linux shell脚本判断文件或文件夹是否存在循环操作
linux shell脚本判断文件或文件夹是否存在循环操作
113 0
|
5月前
|
机器学习/深度学习 Shell Perl
shell 脚本循环语句
shell 脚本循环语句
|
5月前
|
监控 Shell
shell学习(五) 【循环控制continue,break、while 语法】
shell学习(五) 【循环控制continue,break、while 语法】
30 0
|
5月前
|
Shell
shell 学习(四)【if语法 for循环控制】
shell 学习(四)【if语法 for循环控制】
40 0
|
5月前
|
Shell
shell脚本for循环复杂用法
shell脚本for循环复杂用法
86 5
下一篇
无影云桌面