for循环语句
具有循环范围的语句
①按照指定序列信息进行循环
②根据文件行数信息进行循环
③根据字符串的数量进行循环
④根据命令输出信息进行循环
语法格式:
for 变量名 in 循环取值列表
do
执行循环命令主体
done
命令行使用方式(其实就是比脚本方式多了;每个需要换行的地方就写;)
for循环的嵌入循环方式
①爷爷–爸爸–儿子
②爸爸—大儿子/小儿子
实现1到100求和运算,如何使用for循环实现
脚本内容
#!/bin/bash
for i in {1..100}
do
x=$[x+i]
done
echo $x
这个脚本把我绕蒙了。。。
思路:
①for循环取值
②此时取的值与后一次取的值进行相加
③循环体外最后一次输出总和
我卡死在了思路二
现在也不很明白 怎么做一个“存储器”将每次i取的值与后一次i取的值进行相加存储,最后输出。
x=x+i
① ②
这个式子,默认x不给予赋值时,x默认为0.这是默认的一个规则。
黄 x 总和x的数值
第一次取值:i=1 x=0 总和x=1
第二次取值:i=2 x=1 总和x=1+2
第三次取值:i=3 x=3 总和x=(1+2)+3
我是这样找到的方法,但是我多举了几个例子才得出的,不是想出来的,老感觉有点绕。
x=$[x+i] 这是两个变量数值相加,赋值给x变量。
利用for循环实现打印99乘法表
#!/bin/bash
for i in {1..9} #取出第一个数字
do
for n in {1..9} #取出一轮1-9的数字;问题:1*(1-9)这是一轮 第二轮2*(1-9)重复了
一个2*1
do
if [ $i -ge $n ]
then
echo -n "$i*$n=$[$i*$n] "
fi
done
echo ""
done
[root@lsy script 09:11:46]# sh lsy.sh
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
我一开始写出的结果是
[root@lsy script 09:07:37]# sh lsy.sh
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*6=36 6*7=42 6*8=48 6*9=54
7*7=49 7*8=56 7*9=63
8*8=64 8*9=72
9*9=81
将$n 和 $i的位置调换一下就可以修改过来了。
解释脚本:
大循环取一个数值,就可以让小循环取一遍数值
也就是爸爸辈的取出一个1 儿子辈的取出1到9。
问题在于怎么解决 重复的问题
1x2 2x1是重复的。
#!/bin/bash
for i in {1..9} #取出第一个数字
do
for n in {1..9} #取出一轮1-9的数字;问题:1*(1-9)这是一轮 第二轮2*(1-9)重复了一个2*1
do
if [ $i -ge $n ] #解决重复的问题,只有第一个for循环取的数值大于第二个for循环取的数值时才可以进行运算,否则不进行操作
then
echo -n "$i*$n=$[$i*$n] " #-n参数是为了不让输出内容进行换行 冒号后面有两个空格时为了间隔 后面的输出(横向输出)。
fi
done
echo "" # (执行完一次第一个for循环取出的数值,进行换行,每执行完第一个for循环取出的一个数值,都进行一次换行)
done
这个脚本的for循环使用嵌套类型是属于爸爸—儿子的类型;
还不是爷爷—爸爸–儿子的三层嵌套
别人的解法:
#!/bin/bash
for num1 in `seq 9`
do
for num2 in `seq 9`
do
if [ $num1 -ge $num2 ]
then
if ((($num1*$num2) > 9))
then
echo -n "${num1}x${num2}=$((num1*num2)) "
else
echo -n "${num1}x${num2}=$((num1*num2)) "
fi
fi
done
echo " "
done
打印等腰三角形
思路:
① 行数信息 等于传入的参数 最外层循环范围
②列数信息
#!/bin/bash
read -p "please input num: " i
for a in `seq $i`
do
b=$[$i-$a] # 输入空格列信息
for b in `seq $b`
do
echo -n " "
done
for c in `seq $a`
do
echo -n "* "
done
echo
done
注意:
$[ $i- $n] 的方式可以直接运算变量
具体办法:
补充:嵌入式循环
情况一:爷爷–爸爸–儿子 三层嵌套循环
#!/bin/bash
for a in {1…3}
do
echo $a
for b in {a…c}
do
echo
b
for c in {A…C}
do
echo
b$c
done
done
done
情况二:爸爸—儿子①/儿子②
#!/bin/bash
for a in {1..3}
do
echo $a
for b in {a..c}
do
echo $a$b
done
for c in {A..C}
do
echo $a$b$c
done
done
while循环语句
具有循环条件
① 只要条件为真,就会一直循环下去
语法格式
方法一:
while true
do
echo oldboy
done
方法二:不是死循环效果
while ((条件语句)) [条件语句]
do
动作
done
i=0
方法三:不是死循环效果
while read 变量名
do
echo $变量名
done < user.txt
命令行的使用方式
while read line ;do echo $line ;done<user.txt
循环控制语句
exit 退出整个脚本 不再继续执行
break 跳出本次循环 继续执行下面操作(跳出循环,进入下一个语句)
continue 本次循环结束,继续下一次循环(不跳出循环,只是将循环给提前结束了。仍在本次语句中捯饬)