循环是可以使你多次执行一系列命令。
循环包括:
for循环
• while循环
• select循环
• for....do....done, while...do...done,until...do...done,
• for循环使你对列表中的每一项重复执行
一系列命令。
• 语法格式:
• for name in word1 world2 …worldN
• do
• list
• done
• name 是变量名,word1到wordN是一系列由空格分隔的字符序列(单词)。每次执行for循环
时,变量name的值就被设为单词列表(word1到wordN)中的一个单词。for循环执行的次数
取决于指定的word的个数。
• 在for循环的每次反复中,都会执行list中指定的命令。
• 也可以写成如下格式:
• for name in word1 wrold2 … wordN ; do list ;done
for i in 0 1 2 3 4 5 6 7 8 9
do
echo $i
done//----------------------------------------
for i in /etc/a* ;do
echo $idone
试问,从 1到1000 ?
LIST="Tomy Jony Mary Geoge"
for i in $LIST
do
echo $i
done
#!/bin/bash
# "for" "cut" usage
# Using for to read the user of this linux system.
user=`/bin/cut -d ":" -f1 /etc/passwd | /bin/sort`
echo "The following is your linux system's user: "
for username in $user
do
echo $username
done
练习编写脚本:将系统的mysql删除。
• for i in `rpm –qa|grep –i mysql`
• do
• rpm –e $i --nodeps
• done
cut -d: -f 1 /etc/passwd > /tmp/users
-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段
如:使用|分隔
cut -d'|' -f2 1.test>2.test
使用:分隔 cut -d':' -f2 1.test>2.test
使用单引号或双引号皆可
-c 和 -f 参数可以跟以下子参数:
m 第m个字符或字段
m- 从第m个字符或字段到文件结束
m-n 从第m个到第n个字符或字段
-n 从第1个到第n个字符或字段
cut -d: -f 1-7 /etc/passwd
cut -d: -c 1- /etc/passwd
while循环使你能够重复执行一系列的命令,直到某种条件发生。
• 基本语法:
• while cmd
• do
• list
• done
• cmd是一个条件测试命令,list是一个或多个命令的列表。
• 1.执行cmd
• 2.如果cmd的退出状态为非0,则退出循环
• 3.如果cmd的退出状态为0,则执行list
• 4.当list结束时,回到第一步
• 可以写成:
• while cmd ; do list ; done
x=0
while [ $x –lt 10 ]
do
echo $x
x=`expr $x + 1`
done
#!/bin/bash
num=0
while [ $num -lt 10 ];do
echo $num
let num+=1
done
// 当条件为真时执行循环
添加批量用户1
#!/bin/bash
sum=0
while [ $sum -lt 10 ]
do
sum=`expr $sum + 1`
/usr/sbin/useradd aaaa$sum
echo “123456" | passwd --stdin aaaa$sum
done
交互式添加批量用户
#!/bin/bash
echo "please input user name:"
read name
echo "please input number:"
read num
n=1
while [ $n -le $num ]
do
/usr/sbin/useradd $name$n
n=`expr $n + 1 `
done
echo "please input the password:"
read passwd
m=1
while [ $m -le $num ]
do
echo $passwd | /usr/bin/passwd --stdin $name$m
m=`expr $m + 1`
done
可以将一个while循环作为另一个while循环主体的一部
分,如下:
while cmd1; #this is loop1,the outer loop
do
list1
while cmd2; #this is loop2,the inner loop
do
list2
done
list3
done
• cmd1和cmd2是单一命令,而list1、list2和list3是一个或多个命令的列表。
• list1和 list3可选。
练习1:在上例的循环中加一个倒数计时器
练习2:打印1到10的平方
练习3:计算1+2+3+…+100=?
// --
x=0
while [ “$x” –lt 10 ];
do
y=“$x”
while [ “$y –ge 0 ];
do
printf “$y”
y=`expr $y – 1`
echo
done
while循环适合于当某种条件为真时执行一系列命令,而until循环执行一系列命令,直到条件为真时才退出循环。
• 语法如下:
until cmd
do
list
done
• cmd是一条单独指令,而list是一条或多条命令的集合。Until的执行流程和while类似。
• 1.执行cmd
• 2.如果cmd的退出状态为0,则退出until循环
• 3.如果cmd的退出状态为非0,则执行list
• 4.当list执行完毕,返回步骤1
• 大多数情况下,until循环等价用!操纵符对cmd结果取
反的while循环。
• x=1 x=1
• while [ ! $x –ge 10 ] until [ $x –ge 10 ]
• do do
• echo $x echo $x
• x=`expr $x + 1` x=`expr $x + 1`
• done done
• 当条件为真时执行 • 当条件为假时执行
• select循环提供了一种简单的方式来创建一种用户可选择的有限菜单。
• 当你需要用户从一个选项列表中选择一项或多项时非常有用。
• 语法:
select name in word1 word2 …wordN
do
list
done
• name是变量名
• 执行流程:
• 1.list1中的每一项都跟随着一个数字一起显示
• 2.显示一个命令提示符,通常是#?
• 3.进行了有效的选择后,执行list2
• 4.如果list2没有使用循环控制机制(例如break)来退出select循环,过程重新从步骤1开始。
#!/bin/bash
#PS3=‘Select on to execute:’
select program in ‘ls –F’ 'pwd' 'date' 'df -v'
do
$program
# break
done
• 改变提示符:通过改变变量PS3来改变select的提示符,如果PS3没有值,就显示缺省提示符#?
• PS3=“==> “
• PS3值把空格作为最后一个字符。这确保了用户输入不会和提示符冲突。
• 停止和终止循环使用break和contune命令
while :
do
read cmd
case $cmd in
[qQ]|[qQ][uU][iI][tT])break;;
*)$cmd;;
esac
done
• 每一次循环的开始读入一个要执行的命令名,如果命令名是q或quit,则退出循环,否则,循环继续执行相应的命令。
• contunue命令类似break命令,不同之处在于它只是退
出循环的当前反复过程,而不是整个循环。
for FILE in $FILES
do
if [ ! –f “$FILE” ]; then
echo “error:$FILE is not a file.”
contune
fi
done
-----------------------------------------------------------------------------------------------