1、for 命令
for var in list
do
commands
done
2、for循环读取列表值
#!/bin/bash
for i in Beijing shanghai Nanjing
do
echo "Province is $i"
done
输出
Province is Beijing
Province is shanghai
Province is Nanjing
a,b之间的数值,用{a..b}表示,包含a和b。
#!/bin/bash
for i in {1..5}
do
echo "Number is $i"
done
输出
Number is 1
Number is 2
Number is 3
Number is 4
Number is 5
#!/bin/bash
for i in {08..11}
do
echo "Number is $i"
done
输出
Number is 8
Number is 9
Number is 10
Number is 11
mac中没有,但是linux可以显示两位数的
Number is 08
Number is 09
Number is 10
Number is 11
3、for循环读取变量的值
#!/bin/bash
list="Zhangsan Lisi Mike"
for i in $list
do
echo "Name is $i"
done
输出,在shell中会把空格或者tab用来分隔,他们是shell默认的分隔符。
Name is Zhangsan
Name is Lisi
Name is Mike
当然我们也可以自定义分隔符,通过IFS,此脚本中以:分隔,字符串中没有,故作为整体直接输出。
#!/bin/bash
IFS=":"
list="Zhangsan Lisi Mike"
for i in $list
do
echo "Name is $i"
done
Name is Zhangsan Lisi Mike
#!/bin/bash
IFS=":"
list="Zhangsan Lisi Mike:hello world"
for i in $list
do
echo "Name is $i"
done
Name is Zhangsan Lisi Mike
Name is hello world
4、for循环从命令执行结果读取值
命令替换,$(要执行的命令)
#!/bin/bash
FILE=$(ls ../test/)
for i in $FILE
do
echo "file is $i"
done
file is test1
file is test2
file is test_old
#!/bin/bash
FILE=$(ls ../test/)
for i in $FILE
do
if [ -d $i ];then
echo "$i is dir"
elif [ -f $i ]; then
echo "$i is file"
else
echo "error"
fi
done
error
error
error
因为这些文件并不在我们运行的当前目录下,所以输出了一堆error,我们给它添上路径。
#!/bin/bash
FILE=$(ls ../test/)
for i in $FILE
do
if [ -d ../test/$i ];then
echo "$i is dir"
elif [ -f ../test/$i ]; then
echo "$i is file"
else
echo "error"
fi
done
test1 is file
test2 is dir
test_old is file
不用变量,直接在for 循环中用命令替换亦可。
#!/bin/bash
for i in $(ls ../test/)
do
if [ -d ../test/$i ];then
echo "$i is dir"
elif [ -f ../test/$i ]; then
echo "$i is file"
else
echo "error"
fi
done
读取文件的值
#!/bin/bash
for i in $(cat ../test/test1)
do
echo "$i"
done
test1中的内容
test1
zhangsan
lisi
hu nan
输出,因为我们的分隔符是默认分隔符,空白符(空格,tab,换行),需要修改分隔符。
test1
zhangsan
lisi
hu
nan
修改分隔符为换行符,mac和linux系统下都可使用"\r",还可以IFS=$'\n',注意是单引号,且前面有$.
#!/bin/bash
IFS="\r"
for i in $(cat ../test/test1)
do
echo "$i"
done
输出
test1
zhangsan
lisi
hu nan
5、C语言风格的for命令
双括号
for ((a = 1; a < 4; a++))
do
commands
done
#!/bin/bash
for (( i = 1; i < 4; i++ ))
do
echo "next number is: $i"
done
输出
next number is: 1
next number is: 2
next number is: 3
求1到100的和
#!/bin/bash
sum=0
for (( i = 1; i < 101; i++ ))
do
(( sum+=i ))
done
echo "1+2+3+...+100=$sum"
输出:
1+2+3+...+100=5050
6、while循环语法
while command
do
commands
done
#!/bin/bash
num=10
while [ $num -lt 13 ]
do
echo "number is $num"
(( num += 1 ))
done
输出
number is 10
number is 11
number is 12
number is 13
number is 14
7、until命令
until:若不满足command则执行,若满足则退出,和while刚好相反。
until command
do
commands
done
#!/bin/bash
num=5
until (( num == 0 ))
do
echo "number is $num"
(( num -- ))
done
输出
number is 5
number is 4
number is 3
number is 2
number is 1
8、控制循环的break指令
#!/bin/bash
for (( i=1;i<=8;i++))
do
if (( i== 5 )); then
break
else
echo "number is $i"
fi
done
输出
number is 1
number is 2
number is 3
number is 4
多层循环嵌套,break默认跳出内层循环,但是加上一个特定数值可以指定跳出层级。
#!/bin/bash
for (( i=1;i<=8;i++))
do
for (( j=1;j<=5;j++ ))
do
if (( j==3 )); then
break
else
echo "number is $i $j"
fi
done
done
输出
number is 1 1
number is 1 2
number is 2 1
number is 2 2
number is 3 1
number is 3 2
number is 4 1
number is 4 2
number is 5 1
number is 5 2
number is 6 1
number is 6 2
number is 7 1
number is 7 2
number is 8 1
number is 8 2
#!/bin/bash
for (( i=1;i<=8;i++))
do
for (( j=1;j<=5;j++ ))
do
if (( j==3 )); then
break 2
else
echo "number is $i $j"
fi
done
done
输出:在break后面写了2,可以跳出两层循环。
number is 1 1
number is 1 2
9、控制循环的continue指令
#!/bin/bash
for (( i=10;i<15;i++ ))
do
if (( i==13 ));then
continue
else
echo "number is $i"
fi
done
多层循环嵌套,同break一样,后面也可以加数值。
10、处理循环的输出
将循环的结果不显示到屏幕,而是重定向到文件
#!/bin/bash
for (( i=1;i<5;i++ ))
do
echo "number is $i"
done > result.txt
result.txt文件若不存在,会被创建,若存在,会覆盖原来的值。文件中内容如下。
number is 1
number is 2
number is 3
number is 4
还可以通过管道等来处理信息,例如将结果包含1的输出出来。
#!/bin/bash
for (( i=1;i<25;i++ ))
do
echo "number is $i"
done | grep 1
输出
number is 1
number is 10
number is 11
number is 12
number is 13
number is 14
number is 15
number is 16
number is 17
number is 18
number is 19
number is 21