语法格式:bash
for 变量 in 条件(值范围); do 语句 ;done
示例:计算1到10的累加和code
#!/bin/bash sum=0 for i in 'seq 1 10' //seq 1 10 为结果集,是以空格号或回车为间隔遍历值。 do sum=$[$sum+$i] done echo $sum
示例:针对文件的循环,遍历每一个ls的结果值判断是否为目录,而后ls该目录。input
#!/bin/bash cd /etc/ for a in 'ls /etc/' //a是ls /etc/ 结果里的值每一个遍历,是以空格为间隔的 do [-d $a] && ls $a done
示例:/lgs/ 目录下 touch 1 2 touch 3\ 4.txt (文件名是3 4.txt,脱义字符后是空格)it
for i in 'ls ./' do echo $i done ##执行结果是 1 2 3 4.txt //会把文件3 4.txt 当成两个文件 3和 4.txt。验证出是以空格为间隔遍历条件里的值
语法:for循环
while 条件 ;do 语句; done
示例:awk
#!/bin/bash //为了让脚本不意外停止,用screen中运行脚本 while : //while true或者while 1的意思,表示永久循环 do load='w|head -1|awk -F 'load average: ' '{print $2}' |cut -d. -f1 ' if[ $load -gt 10 ] then /usr/local/mail.py xxx@xxx "load high" "$load" fi sleep 30 //30秒检查一次 done
示例:变量
#!/bin/bash while : do read -p "please input a number: " n if[ -z $n ] then echo "你须要输入东西" continue //继续执行下一次的循环 fi n1='echo $n|sed 's/[0-9]//g'' if [ ! -z $n1 ] then echo "你只能输入数字" continue fi break //跳出循环体 done echo $n
#!/bin/bash for i in 'seq 1 10' do echo $i if[ $i -eq 3 ] then break //跳出全部循环 fi echo $i //i=3时,这句不执行了,由于上面跳出for循环体了 done echo aaaaaa ##结果 1 1 2 2 3 aaaaaa
忽略本次循环continue之下的语句,直接进入下一次循环sed
#!/bin/bash for i in 'seq 1 10' do echo $i if [ $i==3 ] then continue //直接进入i=4的循环 fi echo $i done echo$i ##结果 1 1 2 2 3 4 4 5 5 5
#!/bin/bash for i in 'seq 1 5' do echo $i if [ $i==3 ] then exit //i=3,直接不执行之后全部的代码,退出脚本 fi echo $i done echo aaaaaa //i=3不执行该语句 ##结果 1 1 2 2 3