下面来学习一下break和continue命令,其实和C语言Java的语法类似对比记忆就好:
1:break命令
break命令是退出循环的一个简单方法,可以用break命令来退出任意类型的循环,包括while和until循环
a:跳出单个循环
在shell执行break命令时候,它会尝试跳出当前正在执行的循环。
eg:
#!/bin/bash
for var in 1 2 4 5 6 7
do
if [ $var -eq 5 ]
then
break
fi
echo " number : $var"
done
echo "the for loop is completed"
这段代码它会输出5以前的数字然后退出循环,这是有一层循环的时候,如果是二层循环的时候呢?
b:跳出内部循环
当出现二层循环的时候
break命令会自动终止你所在的最内层的循环
eg:
#!/bin/bash
for ((a = 1;a < 5;a++))
do
echo "outer loop $a"
for((b=1;b<10;b++))
do
if [ $b -eq 5 ]
then
break
fi
echo " inner loop :$b"
done
done
当b自增到5的时候,break命令会终止该层循环:注意虽然内部循环遇到b=5的时候立即终止执行但是外部命令还是在继续执行着的
c:跳出外部循环
有时候你在内部循环,但需要停止外部循环,break命令接收单个命令行参数值
break n
其中n 指定了要跳出的循环层级,默认情况下,n 为1,表名跳出当前循环与break命令相同,如果将n值设为2的话,break命令会停止下一级的外部循环
eg:
#!/bin/bash
for ((a=1;a<10;a++))
do
echo "outloop :$a"
for((b=1;b<10;b++))
do
if [ $b -eq 5 ]
then
break 2
fi
echo "inner loop :$b"
done
done
当b自增到5的时候,它会终止外部的循环,使外部的循环停止下来
2:continue命令
continue命令可以提前终止某次循环中的命令,但是并不会终止整个循环,
eg:
#!/bin/bash
for((a=1;a<5;a++))
do
echo "outer loop is : $a"
for((b=1;b<7;b++))
do
if [ $b -eq 5 ]
then
continue
fi
echo "inner loop : $b"
done
done
他执行的结果就是会跳过b=5时候的情况
outer loop is : 1
inner loop : 1
inner loop : 2
inner loop : 3
inner loop : 4
inner loop : 6
outer loop is : 2
inner loop : 1
inner loop : 2
inner loop : 3
inner loop : 4
inner loop : 6
可以看到与break不同是它没有终止接下来的循环但是需要注意的是continue以后的代码就不会执行了
与break命令类似continue命令也允许通过命令行参数指定要继续执行哪一级循环
continue n
eg:
#!/bin/bash
for ((a=1;a<5;a++))
do
echo "$a"
for((b=1;b<4;b++))
do
if [ $a -gt 2 ] && [ $a -lt 4 ]
then
continue 2
fi
var2=$[ $a * $b ]
echo "$a * $b is $var2"
done
done
当a=3的时候跳过当前循环继续上一层循环后面的命令都不会执行
3:处理循环的输出
在shell脚本中,你可以对循环的输出使用管道或者重定向命令,这可以通过done命令之后添加一个处理命令来实现
eg:
#!/bin/bash
for file in /home/rich/*
do
if [ -d "$file" ]
then
echo "$file is a directory"
else
echo "$file is not a directory"
fi
done > output.txt
会在当前目录下生成output.txt文档文件
4:用途:查找可执行文件
#!/bin/bash
#finding files in the PATH
#先定义IFS分隔符
IFS=:
for folder in $PATH
#echo "folder is $folder"
do
echo "folder is $folder"
for file in $folder/*
do
if [ -x $file ]
then
echo " $file"
fi
done
done > check_exe.txt
5:用途:创建多个用户
首先创建包含创建用户的信息文件user.csv文件这个文本文件的格式如下:userId,username 第一个条目为用户的账户ID,第二个条目是用户的全名,两个值之间使用逗号分隔,这样就形成了一种名为逗号分隔值的文件格式(.csv)
要读取文件中的数据,需要用一点shell编程的技巧,我们将IFS分隔符设置成逗号,并将其放入while语句的条件测试部分。然后使用read命令读取文件中的各行
while IFS=',' read -r userId name
read 命令会自动读取.csv文件的下一行内容,所以不需要专门在写一个循环来处理,当read命令返回flase时候,while命令就会退出
要想把数据文件送入while命令,只需要在while命令尾部使用一个重定向符就可以了
users.csv文件如下:
rich,Richard Blum
christine,Chistine Bresnahan
barbara,Barbara Blum
创建useradd.sh
#!/bin/bash
input="users.csv"
while IFS=',' read -r userid name
do
echo "addding $userid"
sudo useradd -c "$name" -m $userid
done < "$input"
如果用户没有sudo权限可以去/etc/sudoers中去编辑是该用户用sudo权限
read命令和C语言中的scanf很像,从文件中读取内容,这样就会将用户添加进去
useradd -c 是添加一个别名说明,-m是在home目录添加文件夹