1.
for 循环语句的一般形式为:
for (表达式1; 表达式2; 表达式3) { 语句; }
首先要强调两点: 1) 表达式1、表达式2和表达式3之间是用分号;隔开的,千万不要写成逗号。
2) for(表达式1;表达式2;表达式3)的后面千万不要加分号,很多新手都会犯这种错误——会情不自禁地在后面加分号。
因为 for 循环只能控制到其后的一条语句,而在C语言中分号也是一个语句——空语句。所以如果在后面加个分号,那么 for 循环就只能控制到这个分号,下面大括号里面的语句就不属于 for 循环了。
下面来看看它的执行过程:
求解表达式1。
求解表达式2。若其值为真,则执行 for 语句中指定的内嵌语句,然后执行第3步;若表达式2值为假,则结束循环,转到第5步。
求解表达式3。
转回上面第2步继续执行。
循环结束,执行 for 语句下面的语句。
从这个执行过程中可以看出,“表达式1”只执行一次,循环是在“表达式2”“表达式3”和“内嵌语句”之间进行的。
for语句最简单的形式是:
for (循环变量赋初值; 循环条件; 循环变量增值) { 语句; }
2.for循环的两种语法
基本语法
for 自定义变量名 in 元素列表;do ...... done
取元素列表中的成员,每取一个执行……位置所写的代码。直到取完结束。
下面列一下这种语法的常用格式
for line in $(ls) #对ls的结果进行循环执行
for file in /home/test/* #对/home/test/下所有的文件和文件夹执行循环
for n in $(seq 1 10) #对1-10中每一个数据进行循环,刚才已经讲到过。
for log in /log/*.log #对/log/目录中所有以.log结尾的文件进行循环。
for n in {1…10} #对1-10中每一个数据进行循环
for Iine in $(< file) #对file文件中的内容每一行执行循环
for arg in “$@” #对传入的参数进行循环
bash支持的语法
#!/bin/bash for ((i=1; i<10; i++));do echo $i done
上面就是类C的循环语法。也很常用
shell脚本中几个特殊的指令
$@: 所有命令行传入的参数或者给函数传入的参数内容
$#: 传入参数的个数
$0: 文件名,是指这个脚本的名字
$n: 取传入的参数的第几个参数的内容。
$*: 所有命令行传入的参数或者给函数传入的参数内容
3.案例
从1加到100
[root@shell /server/scripts]$ cat for100.sh
#!/bin/sh
for i in `echo {1..100}`
do
let count=$[$count+$i]
done
echo $count
[root@shell /server/scripts]$ sh for100.sh
5050
sum=0
# 使用for循环从1加到100
for (( i=1; i<=100; i++ ))
do
sum=$((sum + i))
done
echo “从1加到100的总和是: $sum“
批量获取10.0.0.0/24位的在线的主机 可以ping通则认为在线
[root@shell /server/scripts]$ cat forip.sh
#!/bin/sh
for i in `seq 254`
do
{
IP=10.0.0.$i
ping -c1 -W1 $IP &>/dev/null
if [ $? -eq 0 ];then
echo “$IP 在线”
fi } &
done
wait
echo “在线取IP完成…………….”
[root@shell /server/scripts]$ sh forip.sh
10.0.0.65 在线
10.0.0.56 在线
10.0.0.2 在线
在线取IP完成…………….
wait命令用于等待所有在后台执行的子进程(即通过&符号放入后台执行的命令)执行完毕后再继续执行脚本中的后续命令。在这个脚本中,wait命令的作用是等待所有ping命令(用于检查IP地址在线状态)执行完毕后再输出”在线IP取完成”。
创建删除用户
请输入用户名的前缀: qiang
请输入用户的个数: 2
qiang1
qiang2
1.删除
2.创建
请选择删除以上用户或者是创建用户: 2
你确定要创建以上用户吗?[y|Y|yes|n|N|NO]: y
qiang1 创建成功
qiang2 创建成功
[root@shell /server/scripts]$ sh foruser.sh
请输入用户名的前缀: qiang
请输入用户的个数: 2
qiang1
qiang2
1.删除
2.创建
请选择删除以上用户或者是创建用户: 1
qiang1 删除成功
qiang2 删除成功