shell脚本的3种循环以及相关内容

  • 一、for语句
  • 1.1 for语句的结构
  • 1.2 for语句的实例
  • 二、while循环
  • 2.1 while语句的结构
  • 2.2 while语句应用示例
  • 三、until语句
  • 3.1 until语句的结构
  • 3.2 until语句应用示例
  • 四、常用转义字符
  • 五、补充:break和continue
  • 5.1 break命令
  • 5.2 continue命令


一、for语句

1.1 for语句的结构

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

python的shell循环脚本 shell脚本中的循环_取值


三种简单的for语句的表达方式:

方法一:(默认的取值是空格、tab、换行)
for i in {1..10 }            表示for 语句中的取值列表在1到10中取值。
for i in {1..10. .2}         表示for 语句中的取值列表在1到10中+2取值,即1、3、5、7、9。
方法二:
for i in $(seq 1 10)         表示for 语句中的取值列表在1到10中取值。
for i in $(seq1210)          表示for 语句中的取值列表在1到10中+2取值,即1、3、5、7、9。
方法三:
for ( (i=1; i<=10; i++) )    表示for 语句中的取值列表在1到10中取值。
for ((i=1; i<=10; i+=2) )    表示for 语句中的取值列表在1到10中+2取值,即1、3、5、7、9。

1.2 for语句的实例

1、简单的for语句实例:

#!/bin/bash
#简单for语句示例
for ((i=1; i<=3;i++))
do 
echo "i"
echo "$[ $i + 1]"
echo "----------------"

python的shell循环脚本 shell脚本中的循环_for语句_02


2、批量添加用户

要求: ◆用户名存放在users.txt文件中,每行一个

    ◆初始密码均设为123456

    ◆验证脚本

touch users.txt                              #创建要求的文件

#!/bin/bash
#添加用户
for ((i=1; i<=5; i++))                       #for循环创建5个用户
do
useradd meng$i                               #添加用户,用户名为meng1、meng2、meng3等
echo "123456" | passwd --stdin meng$i        # 给添加的用户设置密码
echo "meng$i" >> /root/users.txt             #把用户名存放到指定文件中
done

python的shell循环脚本 shell脚本中的循环_取值_03


3、根据IP地址检查主机状态

   ◆IP地址存放在ipadds.txt文件中,每行一个

   ◆使用ping命令检测各主机的连通性

方法一:
#!/bin/bash
for a in {1..255}
do
   ping -c 3 -i 0.2 -W 3 "192.168.1.$a" &> /dev/null
   if [ $? -eq 0 ]
   then
      echo "Host 192.168.1.$a is up."
   else
      echo "Host 192.168.1.$a is down."
   fi
done

echo "--------------------"

方法二:
#!/bin/bash
b=1
while [ $b -le 255 ]
do
   ping -c 3 -i 0.2 -W 3 "192.168.1.$b" &> /dev/null
   if [ $? -eq 0 ]
   then
      echo "Host 192.168.1.$b is up."
   else
      echo "Host 192.168.1.$b is down."
   fi
   let b++   
done

二、while循环

2.1 while语句的结构

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

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

python的shell循环脚本 shell脚本中的循环_python的shell循环脚本_04

2.2 while语句应用示例

1、批量添加用户
   ◆用户名称以stu开头,按数字顺序进行编号
   ◆共添加20个用户,即stu1、 stu2、… ;stu20
   ◆初始密码均设为123456

#!/bin/bash
i=1
while [ $i le 20 ]
do 
useradd stu$i
echo "123456" | passwd --stdin stu$i
let i++
done

2、猜商品价格游戏
  ◆通过变量RANDOM获得随机数
   ◆提示用户猜测并记录次数,猜中后退出循环

#!/bin/bash
b=0
c=0
a =$[$RANDOM%1000]
while [$b lt 1 ]
do
let c++
read -p "请你输入猜测的价格(1-1000)" num
if [ a lt $num ];then
echo "猜小了,再来一次。"
elif [ $num -gt $a ];then
echo "猜大了,再来一次。"
elif [ $num -eq $a ];then
echo "恭喜你,猜对了!"
b=2
fi
done
echo "你一共猜了$c次!"

注:$RANDOM是随机值,范围为1-65535

python的shell循环脚本 shell脚本中的循环_for语句_05

三、until语句

3.1 until语句的结构

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

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

python的shell循环脚本 shell脚本中的循环_for语句_06

3.2 until语句应用示例

1、计算1~50的和值
  ◆通过循环累加的方式计算1~50的和值

#!/bin/bash
#1-50的和
sim=0
i=1
until [ $i -gt 50 ]
  do
sum=$[$sum+$i]
let i++
done
echo "1-50的和为$sum!"

python的shell循环脚本 shell脚本中的循环_shell_07

四、常用转义字符

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"前面的字符不会被覆盖

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

五、补充:break和continue

5.1 break命令

break命令是跳出单个循环
实例:

#!/bin/bash
#break的示例
for ((a=1; a<5; a++))
do
        echo "outer loop: $a"
        for ((b=1; b<=50;b++))
        do
                if [ $b -eq 5 ]
                then
                    break
                fi
                echo "inter loop:$b"
        done
done

python的shell循环脚本 shell脚本中的循环_shell_08

5.2 continue命令

continue命令是终止某次循环中的命令,但不会完全中止整个命令

#!/bin/bash
#continue的示例
for ((a=1; a<=15; a++))
do
        if [ $a -gt 5 ] && [ $a -lt 10 ]
        then
                continue
        fi
        echo "current value: $a"
done

python的shell循环脚本 shell脚本中的循环_bash_09