shell 循环语句和转义字符

一、for循环语句

  • for语句需要定义一个变量和取值列表,根据不同的取值执行相同的命令,直到变量值用完。
  • 取值列表里包含多个属性相同的对象,例如:IP地址,通信录等。

1. 语句结构:

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

在这里插入图片描述

2. 入门小例子1:求1到100的和


#!/bin/bash
sum=0
for i in {
    
    1..100}  #取值也可表示为((i=1; i<=100; i++))
do
     sum=$[$i+$sum]  
done
  echo "1-100的和为:$sum

在这里插入图片描述

3. 入门小例子2:批量添加用户

(用户名存放在users.txt文件中,每行一个;初始密码均设为“666666”)

#!/bin/bash

a=`cat /root/users.txt`

for i in $a
do
    useradd $i
    echo "666666" | passwd --stdin $i
done

在这里插入图片描述
在这里插入图片描述

4. 入门小例子3:测试主机是否通信

#!/bin/bash 
for i in 192.168.100.{
    
    10..60..10}
   do
   ping -c 3 -W 2 $i &>/dev/null
if [ $? -eq 0 ]
   then
   echo "$i online"
else
   echo "$i offline"
fi
done
# 也可同上个例子的做法  将主机写入到一个文件中 然后用一个变量直接取值  再赋值给变量i 

在这里插入图片描述

二、while循环语句

  • 根据特定条件反复执行一个命令序列,直到不满足条件为止。
  • 编写时可能会出现死循环,要避免这种情况发生
  • true(真)和false(假)为特殊条件测试操作,也可以在if语句的条件测试中使用。
  • true作为条件时,表示条件永远成立,无限执行,也就是死循环,需要强制终止
  • false作为条件时,表示条件不成立,不执行命令序列
    在这里插入图片描述

1. 语句结构

结构同for语句类似

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

2. 入门练习小例子1:求1到100的和

#!/bin/bash
i=0       #定义初始值 结合循环范围
sum=0
while [ $i -le 100 ]
do
sum=$[$sum+$i]
let i++  # 若不指定迭代方式  将会一直循环  因为初始值始终满足循环范围
done
echo "1到100的和为:$sum"
  • 可以看出同上面用for循环做的 多了 let i++ 是因为while需要手动指定迭代方式
  • ps:for循环都可改用while循环;但while循环不一定都可以用for循环做
    在这里插入图片描述

3. 入门练习小例子2:猜数游戏

通过变量RANDOM获得随机数;提示用户猜测并记录次数,猜中后退出循环

p=$[$RANDOM % 1000]
a=0
num=0
echo "猜猜神秘数字是多少"
while [ $a -eq 0 ]
do
let num++
read -p "请输入你猜的数字:" b
if [ $b -eq $p ];then

  echo "恭喜,你猜对了!"
  echo "您猜了$num 次"
  let a++
  
elif [ $b -gt $p ];then
  echo "你猜大了!"

elif [ $b -lt $p ];then
  echo "你猜小了!"
fi
done
#ps:这只是最简单的演示,也可加一些其他语句进行优化

在这里插入图片描述
图中的 echo “您猜了 s u m 次 " 改 为 e c h o " 您 猜 了 sum 次" 改为 echo "您猜了 sum"echo"num 次” 手残输错了
在这里插入图片描述

三、until循环语句

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

在这里插入图片描述

1. 入门练习小例子:求1到100的和

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

在这里插入图片描述

四、结束循环

1. break 跳出单个循环

示例:

#!/bin/bash

for i in {
    
    1..5}
do
  echo "外循环$i"
    for j in {
    
    1..10}
    do
       if [ $j -eq 5 ]
         then
           break
       fi
         echo "     内循环$j"
    done
done
~    

在这里插入图片描述
在这里插入图片描述

ontinue 中止某次循环中的命令,但不会完全中断

示例:

在这里插入图片描述
在这里插入图片描述

五、IFS字段分隔符

默认包含 空格,制表符,换行符
IFS=$' \t\n'
查看命令:set | grep IFS

在这里插入图片描述
可用变量赋值的方法 对此进行修改
例如:

FS.OLD=$IFS #先将原来的IFS赋给一个变量  做个备份
IFS=$'\n'  # 更改为只换行
...
IFS=$IFS.OLD #还原

六、转义字符

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

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

示例:echo -n
在这里插入图片描述
在这里插入图片描述
示例:echo -e xxx\t
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/bugggggggg/article/details/114623777