Linux基础——Shell(三)

Shell脚本循环

for循环:读取不同的变量值,以逐个执行同一组命令

语句

结构

for  变量名  in  取值列表

do

     命令序列

done

例子

1

 

I从取值列表1~5中取值,然后将值赋给i然后输出到屏幕上,直到所有值都被取走,结束虚幻。

例子

2

 

分析:$*为横向罗列所有参数,将用户输入的112233分别带到脚本中,i的值就是这些参数,每执行一遍,i就会从其中调取值,然后输出在屏幕上,直到所有值都被取出,结束循环。

例子

3

 

i取值列表为随机数1-5,分别取值,输出,然后结束循环。

例子

4

 

不但可以从定义号的值列表取值,还可以带入命令。

*例子

5

模拟C语言

 

若条件永真,那么为无限循环。

While循环:重复测试某个条件,只要条件成立则反复执行

语句

结构

while   条件测试操作

do

       命令序列

done

例子

1

 

条件为真,进入循环,为假则退出循环。

例子

2

无限循环。

例子

3

当没有条件时,就会一直对用户输入的值进行循环

*例子(4

无限循环

作业练习

1.

源码

 

#!/bin/bash

IP=`ifconfig | awk -F "[ :]" 'NR==2{print $4}'`

MASK=`ifconfig | awk -F "[ :]" 'NR==2{print $8}'`

if [ -z "IP" -o -z "MASK" ]; then

        echo "无法获取你的IP地址和子网掩码,请检查网卡配置"

if [ ${#MASK} == "13" ]; then

        ip=`echo $IP | awk -F "." '{print $1"."$2"."$3"."}'`

        for i in ${ip}{1..254}

        do

        ping -c 1 -i 0.1 -w 2 $i

        if [ $? -eq 0 ]; then

                passwd=`echo $RANDOM | md5sum | cut -c1-10`

                useradd $i

                echo "$passwd" | passwd --stdin $i

                echo "$i:$passwd" >>/tmp/zhanghao.txt

        fi

        done

fi

                                                                             

方法二

#!/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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值