Shell脚本循环 | ||
for循环:读取不同的变量值,以逐个执行同一组命令 | ||
语句 结构 | for 变量名 in 取值列表 do 命令序列 done | |
例子 (1) |
I从取值列表1~5中取值,然后将值赋给i然后输出到屏幕上,直到所有值都被取走,结束虚幻。 | |
例子 (2) |
分析:$*为横向罗列所有参数,将用户输入的11,22,33分别带到脚本中,i的值就是这些参数,每执行一遍,i就会从其中调取值,然后输出在屏幕上,直到所有值都被取出,结束循环。 | |
例子 (3) |
i取值列表为随机数1-5,分别取值,输出,然后结束循环。 | |
例子 (4) |
不但可以从定义号的值列表取值,还可以带入命令。 | |
*例子 (5) | 模拟C语言
若条件永真,那么为无限循环。 | |
While循环:重复测试某个条件,只要条件成立则反复执行 | ||
语句 结构 | while 条件测试操作 do 命令序列 done | |
例子 (1) |
条件为真,进入循环,为假则退出循环。 | |
例子 (2) | 无限循环。 | |
例子 (3) | 当没有条件时,就会一直对用户输入的值进行循环 | |
*例子(4) | 无限循环 | |
作业练习 | ||
1. | ||
源码 |
| |
方法二 | #!/bin/bash for x in {1..254} do if ping -c 1 -i 0.1 -w 2 192.168.200.$x && [ $? -eq 0 ];then echo "192.168.200.$x 存活" echo "192.168.200.$x" >> /tmp/zhanghao.txt passwd=`echo $RANDOM | md5sum | cut -c1-10` useradd 192.168.200.$x echo "$passwd" | passwd --stdin 192.168.200.$x echo "192.168.200.$x:$passwd" >>/tmp/zhanghao.txt fi done | |
| ||
2. | ||
方法一 | #!/bin/bash user1=root user1_passwd=abc123, user2=xiaofa user2_passwd=123123 i=1 I=1 cat <<FOF *************************** 1.用户登录 2.用户退出 *************************** FOF while : do a=3 b=3 read -p "请选择模式:" num if [ $num == "1" ]; then read -p "请输入用户名:" name if [ -z $name ]; then echo "您输入的账户无效,请重新输入!" elif [ $name == $user1 ]; then if [ $i -eq 3 ]; then echo "账户已锁定!" continue fi read -p "请输入"$name"账户的密码:" p if [ $p == $user1_passwd ]; then echo "登录成功,欢迎"$user1"!" exit else for i in {1..3} do read -p "请重新输入密码:" p1 if [ $p1 == $user1_passwd ]; then echo "密码正确!欢迎"$user1"!" exit else echo "密码错误"$i"次,请重新输入!" fi done echo "错误达到上限,账户已锁定!" fi elif [ $name == $user2 ]; then if [ $I -eq 3 ]; then echo "账户已锁定!" continue fi read -p "请输入$name账户的密码:" p if [ $p == $user2_passwd ]; then echo "登录成功,欢迎"$user2"!" exit else for I in {1..2} do read -p "请重新输入密码:" p1 if [ $p1 == $user2_passwd ]; then echo "密码正确!欢迎"$user2"登录!" exit else echo "密码错误"$i"次,请重新输入!" fi done echo "错误达到上限,账户已锁定!" fi else echo "无此用户!请重新选择模式!" echo "$name" >> /tmp/zhanghu.txt fi elif [ $num == "2" ]; then exit else echo "警告:请停止你的愚蠢行为!" fi done | |
效果 |
| |
方法二 | #!/bin/bash # author:haishun #exit 0 成功登陆并退出 exit 3 用户选择界面退出 exit 5 用户输入无效字符强制退出 user1=haishun user2=haihai user1_passwd=123123 user2_passwd=123321 lock="" cat << FOF ******************************************************************************************************** 1.用户登录
2.用户退出 ******************************************************************************************************** FOF read -p "请填序号:" NUM if [[ $NUM -eq 1 ]];then while true : do read -p "请输入账户名:" name if [ -z $name ];then echo "没有检测到账户名,请重新输入!" elif [[ $name == `echo $lock | grep -o "haihai"` ]];then echo "此账户已被锁定,请尝试其他用户" elif [[ $name == `echo $lock |grep -o "haishun"` ]];then echo "此账户已被锁定,请尝试其他用户" elif [ $name == $user1 -o $name == $user2 ];then for i in $(seq 3) do let x=3-i read -p "请输入登录用户的密码:" passwd if [ -z $passwd ];then echo "请重新输入密码!" elif [ $name == $user1 -a $passwd == $user1_passwd ];then echo "$name欢迎你!登陆成功" exit 0 elif [ $name == $user2 -a $passwd == $user2_passwd ];then echo "$name欢迎你!登陆成功" exit 0 elif [ $x -eq 0 ];then echo "对不起!您的次数已用尽" else echo "账户或密码输入错误,请重新输入!你还有$x次机会" fi if [ $i -eq 3 ];then lock=$lock$name echo "您的密码已输错三次,账户已经锁定!请尝试其他用户" fi done else echo "没有这个用户名请重新登录" fi done elif [[ $NUM -eq 2 ]];then echo "感谢您的使用!" break exit 3 else echo "无效的数值,请重新进入登陆界面!" break exit 4 fi | |
效果 |
| |
2020-12-23 |
Linux基础——Shell(三)
最新推荐文章于 2024-08-30 13:45:00 发布