Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|

Shell里的循环语句

  • 一、for 循环
    • 1.for 循环语句
    • 2.举例
      • 2.1 计算从1到100所有整数的和
      • 2.2 提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
      • 2.3 求从1到100所有整数的偶数和、奇数和
      • 2.4检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
  • 二、while 循环
    • 1.while 条件语句
    • 2.举例
      • 2.1 用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
      • 2.2编写能够自动生成一个8位随机密码的脚本
  • 三、until 循环
    • 1. until语句
  • 四、常用转义字符
  • 五、双重for循环
    • 1.输出九九乘法表

一、for 循环

  • 读取不同的变量值,用来逐个遍历

1.for 循环语句

for 变量名 in 取值列表
do
	命令序列
done

Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第1张图片

2.举例

2.1 计算从1到100所有整数的和

#!/bin/bash

sum=0										定义变量
for (( i=1;i<=100;i++))						for循环 从1开始到100,101退出循环
{
     
        sum=$[ $sum + $i ]					sum每次+i实现累加
}
        echo "计算从1到100所有整数的和为:$sum"	输出结果,注意不要放在循环里

Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第2张图片
Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第3张图片

2.2 提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

sum=0							定义变量
read -p "请输入一个整数(1~99)" a	输入一个数
for ((i=1;i<=a;i++))			循环从1开始到a,a+1结束
{
     
        sum=$[ $sum + $i]		累加

}
echo "从1到$a所有整数和为:$sum"

Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第4张图片
Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第5张图片

2.3 求从1到100所有整数的偶数和、奇数和


#!/bin/bash
#求从1到100所有整数的偶数和、奇数和
sum1=0									定义变量
sum2=0
for ((i=1;i<=100;i++))					循环从1开始到100,101退出不执行
do
        case $[i % 2]  in				取余判断是否为偶数
        0)
	
   	            sum1=$[  $sum1+$i ]		是偶数,sum1加
        ;;
        *)
                sum2=$[ $sum2+$i ]		是奇数,sum2加
        ;;
        esac


done
echo "1~100所有整数的偶数和为:$sum1 奇数和为:$sum2"

Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第6张图片
在这里插入图片描述

2.4检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中

#!/bin/bash

read -p "请输入起始IP: " a
read -p "请输入结束IP: " b
for ((i=$a;i<=$b;i++))									循环从a开始到b,b+1退出不执行
do
        c=192.168.148.$i
        if [ $i -ge 0 ] && [ $i -le 255 ]				判断ip范围是否有效
        then
                ping -c 3 -i 0.5 -w 2 $c &> /dev/null	通过pin检测通信
                if [ $? = 0 ]							执行成功返回0
                then
                        echo "$c :正在通信中" 
                        echo "$c" >> /root/sh/host_ip	输出到host_ip,注意是>>不是>,>是覆盖
                else
                        echo "$c:不在通信中"
                fi
        else
                echo "输入错误"
                break;
        fi
done

Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第7张图片

Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第8张图片

对于格式的话,大家可以根据自己熟悉的去用,我原本学的C,所以习惯用C的方式去写。

二、while 循环

首先需要手动给他定义一个初始值,循环的时候需要进行迭代的操作,如果不做可能会出现死循环

1.while 条件语句

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

Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第9张图片

2.举例

2.1 用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警

#!/bin/bash
PASSWORD=123456
num=1
while [ $num -le 3 ]
do
        read -p "请输入密码:" PASS
        if [ $PASS == $PASSWORD ]
        then
                echo  "输入密码成功!"
                exit
        else
                let num++

        fi
done
        if [ $num -eq 4 ]
        then
                echo "警告!!"
        fi
        //或者直接
        	 echo "警告!!"
		//因为如果输入的是正确的就直接退出 脚本,不会执行到这句


Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第10张图片

2.2编写能够自动生成一个8位随机密码的脚本


#!/bin/bash
a="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
passwd=''
n=1
while [ $n -le 8 ]
do
        x=$[RANDOM%62]
        y=${a:$x:1}
        passwd=${passwd}$y
        let n++
done
echo "随机生成密码为:$passwd"

Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第11张图片
Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第12张图片

三、until 循环

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

1. until语句

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

Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第13张图片

四、常用转义字符

echo -n 表示不换行输出

echo -e 输出转义字符,将转义后的内容输出到屏幕上

常用的转义字符如下:   \b 转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;"\b"表示删除前一个字符,"\b\b"表示删除前两个字符。

\c 不换行输出,在"\c"后面不存在字符的情况下,作用相当于 echo -n; 但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。

\n 换行,被输出的字符从"\n"处开始另起一行。 
 
\f 换行,但是换行后的新行的开头位置连接着上一行的行尾;

\v 与\f相同;

\t 转以后表示插入tab,即横向制表符;

\r 光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖

\\ 表示插入"\"本身;

五、双重for循环

1.输出九九乘法表

Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第14张图片

#!/bin/bash
for ((i=1;i<=9;i++))						//循环从数学1开始到9
{
     
        for((j=1;j<=i;j++))					//j从1开始到i,实现的是i*j
        {
     
                echo -ne "$i*$j=$[i*j]\t "	//输出结果 -n是不换行输出,-e是使用转义符,\t转义插入tab
        }
        echo ""
}

Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第15张图片
Linux 私房菜————Shell脚本命令(三)循环|for循环|while循环|until循环|_第16张图片

你可能感兴趣的:(Shell,shell,linux,运维,云计算,mysql)