目录
1. 循环语句:在Shell脚本中,常用的循环语句有for循环和while循环。通过循环语句,可以让一段代码重复执行多次,直到满足退出条件为止。
2. 分支语句:Shell脚本中的分支语句主要有if语句和case语句,用于根据条件执行不同的代码块。
一、什么是Shell程序设计-循环与分支语句?
Shell程序设计中的循环与分支语句是用来控制程序执行流程的重要部分。
1. 循环语句:
在Shell脚本中,常用的循环语句有for循环和while循环。通过循环语句,可以让一段代码重复执行多次,直到满足退出条件为止。
- for循环:for循环按照指定的次数或列表中的元素进行循环。
for i in 1 2 3 4 5
do
echo "Number $i"
done
- while循环:while循环根据条件是否满足来决定是否执行循环体内的代码。
count=0
while [ $count -lt 5 ]
do
echo "Count is $count"
((count++))
done
2. 分支语句:
Shell脚本中的分支语句主要有if语句和case语句,用于根据条件执行不同的代码块。
- case语句:case语句根据不同的选项执行不同的代码块。
fruit="apple"
case $fruit in
apple)
echo "苹果";;
banana)
echo "香蕉";;
*)
echo "其他水果";;
esac
通过合理运用循环与分支语句,可以实现复杂的逻辑控制,使Shell脚本更加灵活和强大。
二、学习目的:
掌握Shell编程语言中的循环和分支语句,能够灵活运用这些语句来实现不同的逻辑控制和条件判断。
三、实验内容:
- 学习Shell中的循环语句,包括for循环、while循环和until循环。
- 掌握Shell中的分支语句,包括if语句、case语句等。
- 编写Shell脚本,利用循环和分支语句实现一些简单的任务,如文件操作、数据处理等。
四、实验步骤:
- 首先学习Shell中各种循环和分支语句的语法和用法。
- 编写简单的示例脚本,测试各种语句的效果,理解其运行原理。
- 设计实际的任务,如遍历目录中的文件、统计文件行数、搜索特定内容等,利用循环和分支语句编写相应的Shell脚本。
- 运行脚本,检查输出结果是否符合预期,调试修复可能存在的问题。
五、实验:
1.批量添加用户(for循环)
-用户名存放在users.txt文件中,每行一个
[root@localhost ~]# vi /root/users.txt
chenye
dengchao
zhangjie
-初始密码均设为123456
[root@localhost ~]# vi uaddfor.sh
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME
done
[root@localhost ~]# sh uaddfor.sh
[root@localhost ~]# tail -3 /etc/passwd
chenye:x:1011:1011::/home/chenye:/bin/bash
dengchao:x:1012:1012::/home/dengchao:/bin/bash
zhangjie:x:1013:1013::/home/zhangjie:/bin/bash
结果:
2.根据IP地址坚持主机状态
-IP地址存放在ipadds.txt文件中,每行一个
[root@localhost ~]# vi /root/ipadds.txt
192.168.4.11
14.215.177.38
192.168.4.120
-使用Ping命令检测各主机的连通性
[root@localhost ~]# vi chkhosts.sh
#!/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
[root@localhost ~]# sh chkhosts.sh
Host 192.168.4.11 is up.
Host 192.168.4.110 is down.
Host 192.168.4.120 is up.
结果:
1.批量添加用户(while循环)
-用户名称以stu开头,按数字顺序进行编号
-一共添加20个用户,即stu1、stu2、、、、、stu20
-初始密码均设为123456
[root@localhost ~]# vi uaddwhile.sh
#!/bin/bash
PREFIX="stu"
i=1
while [ $i -le 20 ]
do
useradd ${PREFIX}$i
echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
let i++
done
[root@localhost ~]# sh uaddwhile.sh
[root@localhost ~]# grep "stu" /etc/passwd | tail -3
stu18:x:1028:1028::/home/stu18:/bin/bash
stu19:x:1029:1029::/home/stu19:/bin/bash
stu20:x:1030:1030::/home/stu20:/bin/bash
结果:
2.猜商品价格游戏
通过变量RANDOM获得随机数
提示用户猜测并记录次数,猜中后退出循环
[root@localhost ~]# vi pricegame.sh
#!/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
[root@localhost ~]#sh pricegame.sh
商品实际价格为0-999之间,猜猜看是多少?
请输入你猜测的价格数目:500
太高了!
请输入你猜测的价格数目:250
太低了!
请输入你猜测的价格数目:375
太高了!
请输入你猜测的价格数目:280
太高了!
请输入你猜测的价格数目:265
太高了!
请输入你猜测的价格数目:253
恭喜你答对了,实际价格是 253
你总共猜测了 6 次
结果:
1.击键类型识别(case语句)
提示用户输入一个字符
判断出该字符是字母、数字或者其他字符
[root@localhost ~]# vi hitkey.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
[root@localhost ~]# sh hitkey.sh
请输入一个字符,并按Enter键确认:k
您输入的是 字母 k 。
[root@localhost ~]# ./hitkey.sh
请输入一个字符,并按Enter键确认:8
您输入的是 数字 8 。
[root@localhost ~]# ./hitkey.sh
请输入一个字符,并按Enter键确认:^[[19~
您输入的是 空格、功能键或其他控制字符。
结果:
1.需求描述
编写MAC地址采集脚本getarp.sh
实现思路
使用arping命令获取反馈的MAC地址(必须先安装net-tools才能使用相关命令)
使用while循环查询一个IP网段的所有MAC地址
2.编写脚本程序getarp.sh(程序执行需要点时间)
验证获取的MAC地址列表(cat/etc/ethers)
#!/bin/bash
NADD="192.168.0."
FILE="/etc/ethers"
[ -f $FILE ] && /bin/cp -f $FILE $FILE.old
HADD=1
while [ $HADD -lt 254 ]
do
arping -c 2 -w 1 ${NADD}${HADD} &> /dev/null
If [ $? -eq 0 ]
then
arp -n |grep ${NADD}${HADD} |awk '{print $1,$3}' >> $FILE
fi
let HADD++
done
结果:
六、实验结果与总结:
- 通过实验,掌握了Shell中循环和分支语句的基本用法,能够熟练地编写包含这些语句的Shell脚本。
- 了解了如何利用循环语句对数据进行迭代处理,以及如何利用分支语句进行条件判断和逻辑控制。
- 实验中遇到了一些常见问题,如语法错误、逻辑错误等,通过调试和查阅资料逐一解决,加深了对Shell编程的理解和掌握。
七、实验反思与改进:
- 在编写复杂脚本时,应注意代码的结构和可读性,避免出现过于臃肿和难以理解的代码。
- 需要不断练习和实践,才能更加熟练地掌握Shell编程语言,提高编程水平和效率。
- 可以尝试挑战一些更加复杂的任务,如网络编程、系统管理等,拓展自己的编程能力和应用场景。
八、结论:
通过本次实验,对Shell程序设计中的循环与分支语句有了更深入的了解,掌握了基本的用法和技巧,并且能够应用到实际的任务中去。继续不断学习和实践,将进一步提升自己的编程能力和应用水平。