Shell编程之循环语句for与while

前言:这一章呢稍微有点繁琐,和拐友们玩一下for循环语句,因为接下来的代码更加的繁琐和困难,if语句已经不够用啦,所以我们这章来玩一下for循环语句,它可以极大的减轻我们的负担。

目录

一.for循环语句

1.1for语句的用法

1.2for语句的格式

1.3for语句实验之=简单案列

1.3.1显示打印出字母和数字

1.3.2调用显示i的值

 1.3.3输出0到50之间的偶数和奇数

1.3.4.不带列表循环执行时由用户指定参数和参数的个数决定的

 1.4批量创建用户脚本

1.5根据ip地址列表检查主机状态

 1.6 判断密码输入是否正确!

 1.7幸运会员大抽奖

 二.类似C风格的for循环

2.1for循环格式

2.2显示输出1-5

 2.3嵌套 循环星星的格式

 2.4九九乘法表

​2.5随机生成密码(要达到一定的复杂程度)

 三.while语句

 3.1while语句的案例

 3.1.1打印1-5

3.1.2输出1到100能被3整除的数字

 3.1.3开启apache服务

3.1.4猜数字游戏,猜不对就一直猜,猜对了退出

3.1.5 break 和 continue的区别

3.1.6猜商品价格

 3.1.7监控系统资源中的内存和硬盘空间

 3.1.8商场购物

 四.until 循环语句结构 

4.1计算0-50的和

 五.Shell函数

 5.1Shell函数的基本格式

 5.2函数返回值


一.for循环语句

1.1for语句的用法

用法:

1.读取不同的变量值,用来逐个执行同一组命令

2.for循环经常使用在已经知道要进行多少次循环的场景

3.使用for循环语句时,需要指定一个变量及可能的取值列表,针对每一个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里,“取值列表”称为for语句的执行条件,其中包括多个属性相同的对象,需要预定指定。

1.2for语句的格式

  1. for 变量名 in 取值列表    #变量名=变量值

  2. do

  3.           命令序列

  4. done                                            

1.3for语句实验之=简单案列

1.3.1显示打印出字母和数字

1.for i in `seq 5`   //seq 6=1、2、3、4、5序列
2.do      
3        echo $i
4.done

或者

1.3.2调用显示i的值

1.for i in a b c    //这里调用到i变量了,所以就正常显示i的值(a\b\c)
2.do
3.        echo $i
4.done

 1.3.3输出0到50之间的偶数和奇数

花括号{}和seq在for循环的应用:

for i in {1…50…2} 1-50的奇数

for i in {2…50…2} 1-50的偶数

for i in {10…1} 1-10倒序排列

for i in $(seq 10) 1-10正序排列

for i in $(seq 10 -1 1) 1-10倒序排列

for i in $(seq 1 2 10) 1-10的奇数,中间为步长

#!/bin/bash
#for循环倒取0到50的偶数
for i in {50..0..2}
do
  echo $i
done

echo "一下是奇数:"
#for循环取0到50的奇数
for i in {50..1..2}
do
  echo $i
done

第二种方法:

 

1.3.4.不带列表循环执行时由用户指定参数和参数的个数决定的

1.for 变量名

2.do

3.     command

4.done

脚本:

 结果

 

 1.4批量创建用户脚本

 1.[root@localhost ~]# vim /root/yonghu.txt

 2.liunan
 3.chenchen

 4.guanchen

 5.liufeng

 6.taojian

 7.hehe

 8.[root@localhost ~]# vim /root/yonghu.txt

 9.#!/bin/bash
 10.ULIST=`cat /root/yonghu.txt`
 11.for UNAME in $ULIST
 12.do
 13.        useradd $UNAME
 14.        echo "123456" |passwd --stdin $UNAME &>/dev/null
 15.done

1.5根据ip地址列表检查主机状态

检测主机的状态:

 1.6 判断密码输入是否正确!

 1.7幸运会员大抽奖

 二.类似C风格的for循环

2.1for循环格式

1.for ((expr1;expr2;expr3))

2.do

3.      command

4.done

1.expr1:定义变量并赋初值

2.expr2:决定是否循环

3.expr3:决定循环变量如何改变,决定循环什么时候退出

2.2显示输出1-5

#!/bin/bash

for((i=1;i<=5;i++)) #此时你要注意只要有i++ 就要有两个括号

do

       echo $i

done

 

 2.3嵌套 循环星星的格式

1.#!/bin/bash
2.read -p "请输入星星的规格:" start
3.for ((i=1;i<=$start;i++))
4.do
5.  for ((j=1;j<=$start;j++))
6.      do
7.       echo -n "*"
8.      done
9.echo 
10.done

 

也可以把星星变成三角形的格式:

1.#!/bin/bash
2.read -p "请输入星星的规格:" start
3.for ((i=1;i<=$start;i++))
4.do 
5. for ((j=1;j<=$i;j++))
6.      do
7.       echo -n "*"
8.      done
9.echo 
10.done

 2.4九九乘法表

1.#!/usr/bin/env bash

2.for ((a=1;a<=9;a++))
3.do
4.        for ((b=1;b<=9;b++))
5.        do
6.        if [[ a -ge b ]];then
7.                echo -n "$b*$a=$[a*b] "
8.        fi
9.        done
10.        echo " "
11.done

 也可以把它变成倒三角

1.#!/usr/bin/env bash

2.for ((b=1;b<=9;b++))
3.do
4.        for ((a=1;a<=9;a++))
5.        do
6.        if [[ a -ge b ]];then
7.                echo -n "$b*$a=$[a*b] "
8.        fi
9.        done
10.        echo " "
11.done 

2.5随机生成密码(要达到一定的复杂程度)

1.#!/bin/bash
2.key="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@#¥%%…………&&**(())————+"
3.num=${#key}
4.pass=''
5.for i in {1..8}
6.  do
7.     index=$[RANDOM%num]
8.     pass=$pass${key:$index:1}
9.  done
10.echo "随机生成的密码时:$pass"
 

 方法二:随机生成密码

1.#!/bin/bash
2.mkpasswd -l 6 -s 1 -C 1 -c 1 -d 1
3.#  -c:定义在密码中小写字母字符的最小数目,默认值是2
4.#  -C:定义在密码中大写字母字符的最小数目,默认值是2
5.#  -s:定义在密码中特殊字符的最小数目,默认值是1
6.#  -p:指定程序来设置密码,默认情况下,如果存在使用/etc/yppasswd,否则使用/bin/passwd
7.#  -d:定义密码的最小数目,默认值为2
8.#  -l:定义口令的长度,默认值为9

9.# mkpasswd命令的作用:可以生成应用用户的新密码:选择将其应用于用户。

 三.while语句

1.for循环语句非常适用于列表对象无规律,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合使用另一种循环—while语句。

2.while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环
 

while循环的用法:

1.先定义一个变量
2.while 表达式(条件)
3.do
4.    循环语句命令
5.done

 3.1while语句的案例

 3.1.1打印1-5

[root@localhost~]# vim while.sh

#!/bin/bash

i=1

while [ $i -le 5 ]

do

            echo $i

            let i++ //注意这里如果不改变$i的值,会变成死循环

done

 

ps注意:

 let :相当于 简单的计算器

1.**语 法**
2.let[计算表达式]
3.**功 能**
4.let 命令:是 BASH中用于计算的工具,提供常用运算符还提供了方幂“**”运算符。在变量的房屋计算中不需要加上$来表示变量,如果表达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1

3.1.2输出1到100能被3整除的数字

1.#!/bin/bash
2.i=1
3.while [ $i -le 100 ]
4.do
5.    if [[ $i%3 -ne 0 ]]
6.      then
7.        echo "$i"
8.    fi
9.    let i++
10.done

 

 3.1.3开启apache服务

1.#!/bin/bash
2.while ps aux |grep httpd |grep -v grep &>/dev/null
3. #ps aux 动态查找所有进程 grep httpd :过滤显示出带有httpd字段的  最>后 -v:取反 反向查找,过滤掉带有grep字段的
4.  do
5.     echo "Apache 服务正在运行中"
6.     sleep 2  #睡眠两秒
7.  done
8.echo "Apache 服务不在运行,请查看服务是否出现故障"

3.1.4猜数字游戏,猜不对就一直猜,猜对了退出

1.#!/bin/bash
2.cnum=520
3.while true
4.do
5.read -p "请输入数字:" num
6.    if [ $num -eq $cnum ];then
7.         echo "你猜对了!"
8.         break
9.    elif [ $num -gt $cnum ];then
10.       echo "你猜的数字过大啦!"
11.    elif [ $num -lt $cnum ];then
12.       echo "你猜的数字过小啦!"
13.    fi
14.done

3.1.5 break 和 continue的区别

continue 语句和 break 语句的区别是,continue 语句只结束本次循环,而不是终止整个循环。break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立,并执行当前循环之后的语句。而且,continue 只能在循环语句中使用,即只能在 for、while 和 do…while 中使用,除此之外 continue 不能在任何语句中使用

简单来说:

1.continue 终止每次循环中的命令,但是不会完全终止循环

2.break 跳出单个循环,仅在”for“”while“或”until“循环中有意义。

continue:

 break:

3.1.6猜商品价格

1.[root@localhost ~]# cat test7.sh 
2.#!/bin/bash
3.PC=`expr $RANDOM % 1000`
4.a=0
5.echo "商品实际价格范围0-999,请猜猜看是多少?"
 
6.while true
7.do 
8.read -p "请输入你猜的价格数目:" num
9.let a++
10.if [ $num -eq $PC ];then
11.   echo "恭喜你答对了,实际价格是 $PC "
12.   echo "你总共猜了$a次"
13.   exit 0  #退出
14.elif [ $num -gt $PC ];then
15.      echo "你猜高啦!"
16.  else 
17.      echo "你猜低啦!"
18.fi

19.done

 

 3.1.7监控系统资源中的内存和硬盘空间

#!/bin/bash
disk_size=$( df / |awk '/\//{print $4 }') #硬盘的可用空间
Mem_size=$(free | awk '/Mem/{print $4}')  #分区的可用空间
while
do
  if [ $disk_size -le 2560000 -a $Mem_size -le 102400 ];then
       mail -s Warning root <<EOF
       内存和硬盘空间不足请尽快处理!
EOF

#EOF是免交互模式,直接把东西传给邮箱进行警告#注意EOF必须要顶格写才能成功
  fi
Done

 3.1.8商场购物

#!/bin/bash
i=1
sum=0

while [ $i -le 3 ]
do
   echo "进入第$i家商店"
   read -p "是否进入看看(yes/no)" doing
   while [ $doing = "yes" ]
    do
       echo "1:衣服 ¥2000000"     
       echo "2:鞋子 ¥1000000"
       echo "3:帽子 ¥1200000"
       echo "4:裤子 ¥1500000"
       read -p "请选择你需要购买的商品的序列号:" num

       case $num in
       1)
         echo "衣服购买成功"
         expr $[sum+=2000000] &>/dev/null
       ;;
       2)
         echo "鞋子购买成功"
         expr $[sum+=1000000] &>/dev/null
       ;;
       3)
         echo "帽子购买成功"
         expr $[sum+=1200000] &>/dev/null
       ;;
       *)
         echo "裤子购买成功"
         expr $[sum+=1500000] &>/dev/null

       esac
            read -p "是否进行购买(yes/no)?" doing
       done
       let i++
       if [ $doing = "no" ]
       then continue
       fi
done
echo "购物总价为:$sum"

 四.until 循环语句结构 

用法: 重复测试某个条件,只要条件不成立则反复执行

只要while后面的命令退出状态为0,while循环就一直执行下去,until命令与while命令相似,唯一的区别在于,只要until后面的命令退出不为0,until循环就一直执行下去,也就是说,使用until语句重复执行一段代码直到条件为真为止,与while类似

until 条件测试操作
do
	命令序列
done

4.1计算0-50的和

1.#!/bin/bash
2.#功能1:0-50的和是多少?
3.#i=0;s=0
4.#until [ $i -eq 51 ]
5.#do
6.  #   let s+=i
7.  #  let i++
8.#done
9.#echo $s

 

 五.Shell函数

 5.1Shell函数的基本格式

[function] 函数名(){
  命令序列
[return x]                           #使用return或exit可以显示的结束函数 
}


或者

                                     #也可以省略掉[function],它表示该函数的功能

函数名() {                            #函数名后面()是没有内容的
  命令序列                            #我们执行的命令内容放在{}里面
}

1.函数定义完之后并不会自动执行,需要调用才行

2.好处在于可以写一段功能代码作为函数,有需要就直接调用定义的时候哪怕出现语法错误也没关系,不调用就不会报错

3.当然我们写函数最终目的还是为了调用,为了实现某个功能块。

 5.2函数返回值

return表示退出函数并返回一个退出值,脚本中可以用$? 变量显示该值使用原则

1.函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码

2.退出状态码必须是0~255,超出时值将为256取余

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值