Linux Shell 脚本之循环语句

一、echo

echo -n //表示不换行输出

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

常见转义符

转义符号 含义

-n 表示不换行输出

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

\b 转义后相当于按退格键,但前提是b后面存在字符: b表示删除前一个字符,\b\b 表示删除前两个字 符

\c 不换行输出,当\c后面存在字符时,后面的字符不会被输出

\n 换行,被输出的字符从\n除开始另起一行

\f或\v 换行,但是换行后的新行的开头位置连接着上一行的行尾

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

\r 光标移至行首,用后面的字符覆盖等长度的前面的字符

二、for循环

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

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

格式

for 变量名 in 取值列表

do

命令序列

done

举例1

vim  a.sh               #创建脚本a.sh
脚本内容:
#!/bin/bash
for  i   in  {1..5}    #for循环5次,第一次i=1,第二次i=2以此类推直到i=5
do
echo "$i"               #循环动作,每次输出$i 
done                    #for语句结束标志
bash  a.sh              #调用shell执行脚本a.sh
执行结果:
1
2
3
4
5

举例2

vim a.sh                
脚本内容:
#!/bin/bash
for(( i=0;i<=5;i++ ))     #定义for循环i变量初始值为0,循环条件i小于等于5,每循环一次i自加1
do
echo "$i"                 #for循环每循环一次执行一次输出$i
done                      #for语句结束标志
bash a.sh                 #调用shell执行脚本
输出结果:
0
1
2
3
4
5

三、while

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

常在不知道范围的时候成立

格式

while 条件测试操作

do

命令序列

done

举例:

vim  b.sh               #创建脚本b.sh
脚本内容:
#!/bin/bash
i=0
while [ $i -le 5  ]     #变量i小于等于5时执行while循环
do
echo "$i"               #循环执行内容,每循环一次打印$i
let i++                 #每循环一次计算一次i++即i自己+1
done                    #while语句结束标志 
sh b.sh              #调用bash执行b.sh脚本
执行结果:
0
1
2
3
4

死循环语句

while  [1  -eq  1]   判断条件写一个永久为真的条件 
   do       一直执行do内的命令
   done
while  true        直接写判断条件为真
   do       一直执行do内的命令
   done
while :         判断条件为冒号也表示死循环
   do       一直执行do内的命令
   done

四、until

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

格式

until 条件测试操作

do

命令序列

done

举例:

[root@localhost opt]# vim until.sh
i=1
until [ $i -gt 10 ]
do
echo $i
let i++
done

五、跳出循环

1、continue跳出循环

表示满足continue条件时跳出循环,但是不影响后续循环执行

举例:

vim a.sh         #创建脚本a.sh
#!/bin/bash
for i in {1..5}  #for循环5次从i=1开始到i=5    
do
if [ $i -eq 3 ]  #if判断语句,若$1等于3则执行then的内容
then 
continue         #当$i=3时跳出循环但不影响后面循环  
fi               #结束if语句
echo "$i"        #没执行一次for循环输出一次$i
done             #for循环结束语句
sh a.sh        #调用shell执行脚本
输出结果
1
2
4
5

break跳出循环

在某个循环中遇到break直接结束此次循环,但是不影响外边嵌套的循环。

break [数字] 结束数字中的几次循环,若为2则结束自己所在循环和外边嵌套的一层循环,若为3则结束自己所在循环和外边嵌套的2层循环

举例:

vim   a.sh     #创建a.sh脚本
#!/bin/bash 
for j in {1..3}          #第一层for循环,j=1,2,3各执行一次do的内容
do                       #第一层for循环的执行内容
    for i in {1..5}      #第二层for循环,i=1,2,3,4,5各执行一次do的内容
    do                   #第二层for循环的执行内容  
        if [ $i -eq 3 ]  #第二层for循环中添加的if判断语句,当$i=3是执行then内容
        then                
        break            #第二层for循环判断语句执行命令,break结束循环
        fi               #if语句结束
    echo "$i"            #第二层for循环语句执行每循环一次输出$i
    done                 #第二层for循环语句结束标志                
done                     #第一层for循环语句结束标志
sh a.sh                #调用bash执行a.sh脚本
1
2
1
2
1
2

经典常用例题

  1. 循环打印9*9乘法表

vim 99.sh              #编辑99.sh脚本
#!/bin/bash
for  j  in  {1..9}     #列循环内容不变  
do
    for i in `seq $j`
    do
    echo -ne "$j*$i=$[ $j*$i ]\t"   #行输出内容修改为9*9算式和结果。$[ ]表示计算里面的正整数结 
                              果,echo -e参数表示调用转义符,\t表示制表符即循环时输出一个tab键
    done
echo                   
done                   
bash  99.sh            #调用shell执行脚本
输出结果:
1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
5*1=55*2=105*3=155*4=205*5=25
6*1=66*2=126*3=186*4=246*5=306*6=36
7*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

  1. 循环ping测试某个网段网络连通性

vim ping.sh    #创建ping.sh脚本
脚本内容:
#!/bin/bash
read -p "请输入需要测试的网段,格式为(192.168.233.):" ip #读取用户输入内容为变量ip
for i in {1..254}               #for循环254次,从i=1开始
do
{                               #将{}内容当成一个整体
ping -c2 -w2 $ip$i &>/dev/null  #指定ping包为2个超时结束时间为2秒且将产生的内容全部放                                  入null垃圾桶中,&符号表示错误输出也放入null中
    if [ $? -eq 0 ]             #if条件判断如果上一个循环执行的命令是正确的则$?返回                                    0,若等于0执行then的内容
    then
    echo "$ip$i  is  online"    #if条件成立执行打印
    echo $ip$i >> host.txt      #将if条件成立的ip追加到host.txt文件中
    else
    echo "$ip$i  is  offline"   #if添加判断不成立执行打印
    fi
}&                              #将循环成立的内容放入后台执行
done
wait                            #执行结束不等待直接退出

3.while死循环实现猜数字游戏

需求:生成随机1-100的价格给用户猜测直到猜对结束游戏,并统计用户猜对猜了几次

vim game.sh      #创建脚本game.sh
脚本内容:
#!/bin/bash
num=`echo $[ RANDOM%100+1 ]`  # $[RANDOM]是一个0-32767的随机数,%100+1除100取余+1表示生成0-100随机数
time=0                                             #定义猜对次数变量time初始值为0
while true                                         #生成while死循环
do                                                 #循环动作为do内的内容
let time++                                         #每循环一次time变量自加1
read -p "请输入您猜测的数字,范围(1-100):" user   #读取用户输入的内容为变量user
    if [ $user -eq $num ]                          #条件判断分支1,如果用户输入等于随机生成执行then动作
    then 
    echo "您猜对了,您一共猜测了$time次"           #if分支1条件成立执行输出
    break                                          #if分支1条件成立则结束本次循环
    elif [ $user -gt $num  ]                       #条件判断分支2,如果用户输入大于随机生成执行本次then动作
    then
    echo "您猜大了,请往小猜"                      #条件判断分支2成立提示用户猜大了
    elif [ $user -lt $num ]                        #条件判断分支3,如果用户输入小于随机生成执行本次then动作
    then 
    echo "您猜小了,请往大猜"                      #条件判断分支3成立提示用户猜小了
    fi                                             #if语句结束
done
sh game.sh                                      #调用bash执行脚本

你可能感兴趣的:(运维)