shell学习3---for循环

for循环格式

基本格式

for 变量名称(注意是名称不是变量$等) [ in 名称范围 ] (可以不写)

do

执行内容 (若满足循环则做什么动作)

done (for循环结束标志)

名称范围是字符

[root@server1 ~]# ./for_test.sh
1
2
3
4
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for i in {1,2,3,4}
do
  echo "$i"
done

名称范围是一个文件

[root@server1 ~]# ./for_test.sh
a
b
c
d
e
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for i in `cat 1.txt`
do
  echo "$i"
done
[root@server1 ~]# cat 1.txt
a
b
c
d
e
类C语言格式

for (( 表达式1 ;表达式2;表达式3 ))

do

执行内容 (若满足循环则做什么动作)

done (for循环结束标志)

[root@server1 ~]# ./for_test.sh
1
2
3
4
5
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
  echo "$i"
done

seq

seq 是一个 Linux/Unix 命令,用于生成一个序列(sequence)并打印出来。

格式

seq 2 (起始数) 2(间隔数) 10(终止数)

[root@server1 ~]# seq 2 2 10
2
4
6
8
10
[root@server1 ~]# seq 10 -2 1
10
8
6
4
2
seq结合for循环
[root@server1 ~]# ./for_test.sh
1
3
5
7
9
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for i in `seq 1 2 10`
do
  echo "$i"
done

跳出循环

break和continue命令是控制循环流程重要命令。

continue跳出循环

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

它的作用是在循环内部跳过本次循环并继续下一次循环

[root@server1 ~]# ./for_test.sh
1
3
5
9
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for i in `seq 1 2 10`
do
  if [ $i -eq 7 ]
    then
      continue
  fi
  echo "$i"
done

continue [数字] 是一个 Shell 中的控制结构,当数字是2时,它的作用是在循环内部跳过本次循环并继续下一次循环,而且会跳过两层循环,即在两层循环内部执行。

[root@server1 ~]# ./for_test.sh
1
1
1
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for ((i=1;i<=3;i++))
do
  for ((j=1;j<=3;j++))
  do
    if [ $j -eq 2 ]
      then
        continue 2
    fi
    echo "$j"
  done
done
break跳出循环

break跳出循环:break直接结束此次循环,但是不影响外边嵌套的循环。

[root@server1 ~]# ./for_test.sh
1
2
1
2
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for ((i=1;i<=2;i++))
do
  for ((j=1;j<=4;j++))
  do
    if [ $j -eq 3 ]
      then
        break
    fi
    echo "$j"
  done
done

break [数字] 结束数字中的几次循环

[root@server1 ~]# ./for_test.sh
1
2
[root@server1 ~]# cat for_test.sh
#!/bin/bash
for ((i=1;i<=2;i++))
do
  for ((j=1;j<=4;j++))
  do
    if [ $j -eq 3 ]
      then
        break 2
    fi
    echo "$j"
  done
done

echo相关的常用转义字符

echo -n 表示不换行输出。

[root@server1 ~]# ./for_test.sh
123123[root@server1 ~]# cat for_test.sh
#!/bin/bash
for ((i=1;i<=2;i++))
do
  for ((j=1;j<=3;j++))
  do
    echo -n "$j"
  done
done

echo -e 输出转义字符,将转义后的内容输出到屏幕上, 只有加了-e才能执行下面的转义符。

常用转义符:

\b转义后是一个退格符(Backspace),用于将光标向前移动一个位置,但不删除该位置上的字符。不过,当输出到终端时,实际的效果可能会受到终端如何处理退格符的影响。

[root@server1 ~]# echo -e "1234a"
1234a
[root@server1 ~]# echo -e "1234\ba"
123a
[root@server1 ~]# echo -e "1234\b\ba"
12a4

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

[root@server1 ~]# echo -e "1234\c"
1234[root@server1 ~]#
[root@server1 ~]# echo -e "12\c34"
12[root@server1 ~]#

\n 转义后表示换行,被输出的字符从"\n"处开始另起一行。

[root@server1 ~]# echo -e "12\n34"
12
34

\f 转义后是一个表单馈送符(Form Feed),通常用于在打印输出中将纸张向前移动到下一页的开始,或者在终端中,它通常用于清除屏幕并移动光标到屏幕的左上角(尽管这个行为可能会根据终端的不同而有所差异)。

\v 转义后是一个垂直制表符(Vertical Tab),它在输出中通常用于在垂直方向上移动光标到下一个制表位置。

[root@server1 ~]# echo -e "1234\v1234"
1234
    1234

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

[root@server1 ~]# echo -e "1234\t1234"
1234    1234

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

[root@server1 ~]# echo -e "1234\rabcd"
abcd
[root@server1 ~]# echo -e "1234\rab"
ab34

使用for循环和echo相关的常用转义字符打印一张出九九乘法表

1.打印一个9*9的正方形队列

[root@server1 ~]# ./99_test.sh
*********
*********
*********
*********
*********
*********
*********
*********
*********
[root@server1 ~]# cat 99_test.sh
#!/bin/bash
for ((i=1;i<=9;i++))
do
  for ((j=1;j<=9;j++))
  do
    echo -n "*"
  done
echo #用于换行
done

2.砍半

[root@server1 ~]# ./99_test.sh
*
**
***
****
*****
******
*******
********
*********
[root@server1 ~]# cat 99_test.sh
#!/bin/bash
for ((i=1;i<=9;i++))
do
  for ((j=1;j<=i;j++))
  do
    echo -n "*"
  done
echo #用于换行
done

3.填入内容

[root@server1 ~]# ./99_test.sh
1*1=1
1*2=22*2=4
1*3=32*3=63*3=9
1*4=42*4=83*4=124*4=16
1*5=52*5=103*5=154*5=205*5=25
1*6=62*6=123*6=184*6=245*6=306*6=36
1*7=72*7=143*7=214*7=285*7=356*7=427*7=49
1*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=64
1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81
[root@server1 ~]# cat 99_test.sh
#!/bin/bash
for ((i=1;i<=9;i++))
do
  for ((j=1;j<=i;j++))
  do
    echo -n "$j*$i=$(($j*$i))"
  done
echo #用于换行
done

4.调整格式

[root@server1 ~]# ./99_test.sh
1*1=1
1*2=2   2*2=4
1*3=3   2*3=6   3*3=9
1*4=4   2*4=8   3*4=12  4*4=16
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81
[root@server1 ~]# cat 99_test.sh
#!/bin/bash
for ((i=1;i<=9;i++))
do
  for ((j=1;j<=i;j++))
  do
    echo -ne "$j*$i=$(($j*$i))\t"
  done
echo #用于换行
done

完成。

相关推荐
心灵彼岸-诗和远方1 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘1 小时前
NFS服务器
运维·服务器
苹果醋32 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰2 小时前
[linux]docker基础
linux·运维·docker
知孤云出岫2 小时前
云上拼团GO指南——腾讯云博客部署案例,双11欢乐GO
云计算·腾讯云
@小博的博客2 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
Jason-河山3 小时前
【自动化更新,让商品信息跳舞】——利用API返回值的幽默编程之旅
运维·自动化
饮浊酒3 小时前
Linux操作系统 ------(3.文本编译器Vim)
linux·vim
lihuhelihu3 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
哲讯智能科技3 小时前
SAP Business One市场价格解析
运维·sap·erp