循环
for
语法
for 变量 in 值1 值2 值n
do
命令1
命令2
命令n
done
终端写法
$ for 变量 in 值1 值2 值n; do 命令1; 命令2; 命令n; done
示例
循环一组数字
for i in 1 2 3 4 5; do
echo "这是第 $i 次循环"
done
输出
这是第 1 次循环
这是第 2 次循环
这是第 3 次循环
这是第 4 次循环
这是第 5 次循环
循环输出字符串
for i in "This is a string";
do
echo "$i"
done
遍历一个目录下的所有文件
#!/bin/bash
cd /root/for/100/
for a in `ls /root/for/100/` # 将ls的结果赋值给$a
do
[ -d $a ] && ls $a # -d判断$a是否为目录,如果是则执行ls $a
if [ -d $a ]
then
echo $a
ls $a
fi
done
while
语法
while 条件
do
命令1
命令2
...
done
示例
循环累加数字
int=1
while [ $int -le 5 ]
do
echo $int
let "int++"
done
$int小于等于5则一直循环。let是终端命令,用于计算变量中的值。let "int++"表示每次循环$int加1。
每隔1分钟检查一下系统负载,当系统的负载大于10的时候,发一封邮件(监控脚本)
while :
do
load=`uptime | awk -F': ' '{print $NF}' | awk -F'.' '{print $1}'`
if [ $load -gt 10 ]
then
/usr/local/sbin/mail.py
fi
sleep 60
done
while :表示死循环,还可以用1``true表示。sleep 60表示每隔60秒执行一次。
根据输入的内容,输出对应的结果
while :
do
read -p "Please input a number: " num
if [ -z "$num" ]
then
echo "You must input a number."
continue
fi
n1=`echo $num|sed 's/[0-9]//g'`
if [ -n "$n1" ]
then
echo "Input error."
continue
fi
break
done
echo $num
# 运行效果
[root@lwz1 ~]# sh while2.sh
Please input a number:
You must input a number.
Please input a number: a
Input error.
Please input a number: 11
11
read交互式输入。-p表示提示信息if中的
-z表示判断字符串是否为空。-n表示判断字符串是否为非空。
continue表示继续下一次循环。
break表示跳出循环。
跳出循环
break 跳出循环
for i in `seq 1 5`
do
echo a=$i
if [ $i -eq 3 ]
then
break
fi
echo b=$i
done
echo c=$i
# 运行效果
[root@lwz1 ~]# sh while4.sh
a=1
b=1
a=2
b=2
a=3
c=3
exit 退出整个脚本
for i in `seq 1 5`
do
echo a=$i
if [ $i -eq 3 ]
then
exit
fi
echo b=$i
done
echo c=$i
# 运行效果
[root@lwz1 ~]# sh while4.sh
a=1
b=1
a=2
b=2
a=3
与
break的区别是,break从$b执行前结束整个循环,然后执行循环外的$c。而exit则在$b执行前直接结束整个脚本。
continue 跳出本次循环
for i in `seq 1 5`
do
echo a=$i
if [ $i -eq 3 ]
then
continue
fi
echo b=$i
done
echo c=$i
# 运行效果
[root@lwz1 ~]# sh while4.sh
a=1
b=1
a=2
b=2
a=3
a=4
b=4
a=5
b=5
c=5
当
$i=3时,continue会忽略当前循环,然后继续执行下一次循环。