目录
特点:一定要有可以跳出循环的条件,否则就是死循环
那么跳出循环的条件有两种:
①已知循环的次数;
②未知次数,但是有跳出循环的限定条件;
- ##第一种语法
- for i in {词语列表}
- do
- 命令序列
- done
-
- ##第二种语法
- for((i=1;i<=100;i++))
- do
- 命令序列
- done
- while [ 判断 ] ##条件成立继续循环,条件不成立,不再循环
- do
- 命令序列
- let i++ ##类似的语句
- done
- until [ 判断 ] ##条件不成立执行循环,条件成立则不再继续执行
- do
- 命令序列
- let i++ ##也可不是这种,就是会让时间循环起来的条件
- done
- while的死循环
- while true ##永远是真,那么已知执行循环
- while : ##永远是真,那么已知执行循环
- while [ 1 -eq 1 ] ##永远是真,那么已知执行循环
-
- until的死循环
- until false ##永远是假的,那么已知执行
- until [ 1 -eq 0 ] ##永远是假的,那么已知执行循环

- #!/bin/bash
-
- for((i=1;i<=3;i++))
- do
- for((j=1;j<=3;j++))
- do
- if [ $j -eq 2 ]
- then
- # continue
- # break
- exit
- else
- echo j=$j
- fi
- done
- echo ------------------
- done


- ##第一种办法,使用for循环
- suma=0
- for i in {1..100}
- do
- suma=$[suma+i]
- done
- echo sum1=${suma}
-
- ##第二种办法,还是使用for循环
- sumb=0
- for((j=0;j<=100;j++))
- do
- let sumb+=$j
- done
- echo sum2=${sumb}
-
- ##第三种办法,使用while循环
- sumc=0
- n=0
- while [ $n -le 100 ]
- do
- sumc=`expr ${sumc} + $n`
- let n++
- done
- echo sum3=${sumc}
-
- ##第四种方法,使用until语句
- sumd=0
- x=0
- until [ $x -gt 100 ]
- do
- sumd=$((${sumd}+${x}))
- let x+=1
- done
- echo sum4=${sumd}
-
- ##第五种办法,使用seq和bc计算
- sume=$(seq -s+ 100|bc)
- echo sum5=${sume}
表示0-100的奇数和偶数的方式
使用花括号:奇数{1..100..2} 偶数{0..100..2}
使用seq:奇数 seq 1 2 100 偶数 seq 0 2 100
使用for循环:奇数((i=1;i<=100,i+=2));偶数((i=0;i<=100,i+=2))

- #!/bin/bash
- for i in /xh/*.bak ##表示变量i的取值来源于文件夹xh下面的以bak结尾的文件
- do
- name=$(echo $i|cut -d"." -f1) ##表示每次循环的动作是,先将bak前面的名称提取出来给name变量赋值
- mv $i ${name}.txt ##变量i就是文件名,然后把原来的文件名改为新的文件名,以txt结尾
- done


- #!/bin/bash
- ip=$(ifconfig ens33|grep netmask|awk '{print $2}') ##提取本机的ip地址
- net=${ip%.*}. ##提取本机的网段
- end=254
- for((i=3;i<="${end}";i++)) ##设置循环条件从3到254循环
- do
- {
- ping -c2 -W1 ${net}${i} &>/dev/null ##使用ping检测主机是否存活
- if [ $? -eq 0 ] ##能ping通则是0,ping不通是非0
- then
- echo ${net}${i} >>/xh/alive ##将存活的主机记录在文件中
- fi
- }& ##并行运行,可以大大提高脚本的执行速度
- done
- wait ##这个很重要,让主机能够把新文件/xh/alive文件存留下来
-
- n=`cat /xh/alive|wc -l` ##统计文本的行数即为主机的数量
- echo "你一共有${n}台主机存活"

- #!/bin/bash
-
- for((i=10;i>=0;i--))
- do
- for((j=1;j<=i;j++))
- do
- echo -e "*\c"
- done
- echo
- done

- #!/bin/bash
- for i in {1..9} ##从1-9中取值
- do
- for((j=1;j<=i;j++)) ##这个也可以写成 for j in `seq $i`
- do
- echo -e "$j*$i=$[i*j]\t\c" ##这是乘法表的格式几乘几得出结果,-e可以使用\t制表符对齐,\c不换行
- done
- echo ##这个echo是用来换行的
- done

- #!/bin/bash
- com=`echo $[RANDOM%1000+1]` ##机器产生的随机数
- t=0
-
- while true
- do
- read -p "请输入你猜的价格(1-1000):" price ##人类输入的价格数字
- let t++ ##统计猜的次数
- if [ ${com} -eq ${price} ]
- then
- echo "恭喜你猜对了,实际价格为${price},你一共猜了${t}次"
- exit
- elif [ ${com} -gt ${price} ]
- then
- echo "不好意思,你猜低了"
- else
- echo "猜高了,便宜点"
- fi
- done
