特殊流程控制语句
exit语句
语法
exit [返回值]
如果exit命令之后定义了返回值,那么这个脚本执行之后的返回值就是我们自己定义的返回值。
可以通过查询$?这个变量,来查看返回值。
如果exit之后没有定义返回值,脚本执行之后的返回值是执行exit语句之前,最后执行的一条命令的返回值。
示例:
read -p "number: " -t 30 num
#如果变量num是数字,则把num的值替换为空
#把替换之后的值赋予变量m
m=$(echo $num | sed 's/[0-9]//g')
#判断变量m的值是否为空,不为空输出报错信息,退出脚本,退出返回值为99
[ -n $m ] && echo "err" && exit 99
#如果没有退出,则打印变量num中的数字
echo "$num"
[root@VM-12-14-centos ~]# ./test12.sh
number: 5
5
[root@VM-12-14-centos ~]# echo $?
0
[root@VM-12-14-centos ~]# ./test12.sh
number: a
err
[root@VM-12-14-centos ~]# echo $?
99
break语句
当程序执行到break语句时,会结束整个当前循环。而continue 语句也是结束循环的语句,不过continue 语句单次当前循环,而下次循环会继续。
示例:
#循环五次
for (( i=1;i<=5; i=i+1 ))
do
#如果变量i的值等于3
if [ $i -eq 3 ]
then
#退出整个循环
break
fi
#输出变量i的值
echo $i
done
[root@VM-12-14-centos ~]# ./test13.sh
1
2
continue语句
continue也是结束流程控制的语句。如果在循环中,continue语句只会结束单次当前循环。
#循环五次
for (( i=1;i<=5; i=i+1 ))
do
#如果变量i的值等于3
if [ $i -eq 3 ]
then
#退出本次循环
continue
fi
#输出变量i的值
echo $i
done
[root@VM-12-14-centos ~]# ./test14.sh
1
2
4
5
三的那次循环跳出了,没有打印
正则表达式
. 匹配任意单个字符,可以是一个汉字
[root@VM-12-14-centos ~]# echo abc |grep a.c
abc
[root@VM-12-14-centos ~]# echo $?
0
[root@VM-12-14-centos ~]# echo dbc |grep a.c
[root@VM-12-14-centos ~]# echo $?
1
* 对前一项进行0次或多次重复匹配
[] 匹配指定范围内的任意单个字符
[root@VM-12-14-centos ~]# echo a |grep [a~d]
a
[root@VM-12-14-centos ~]# echo $?
0
[root@VM-12-14-centos ~]# echo a |grep [c~d]
[root@VM-12-14-centos ~]# echo $?
1
^ 在每行的开始进行匹配
[root@VM-12-14-centos ~]# echo "123 456 789" | grep ^123
123 456 789
[root@VM-12-14-centos ~]# echo $?
0
[root@VM-12-14-centos ~]# echo "123 456 789" | grep ^456
[root@VM-12-14-centos ~]# echo $?
1
$ 在每行的末尾进行匹配
[root@VM-12-14-centos ~]# echo "123 456 789" | grep 789$
123 456 789
[root@VM-12-14-centos ~]# echo $?
0
[root@VM-12-14-centos ~]# echo "123 456 789" | grep 123$
[root@VM-12-14-centos ~]# echo $?
1
[^str] 对任何不在str中的单个字符进行匹配
[root@VM-12-14-centos ~]# echo "a" | grep [^abc]
[root@VM-12-14-centos ~]# echo $?
1
[root@VM-12-14-centos ~]# echo "m" | grep [^abc]
m
[root@VM-12-14-centos ~]# echo $?
0
\ 忽略后面一个字符的特殊含义
[root@VM-12-14-centos ~]# echo "asdf" | grep "^a.df"
asdf
[root@VM-12-14-centos ~]# echo $?
0
[root@VM-12-14-centos ~]# echo "asdf" | grep "^a\.df"
[root@VM-12-14-centos ~]# echo $?
1
a{n} a重复指定的次数
[root@VM-12-14-centos ~]# echo "aaaaaaaa" | grep '^a\{5\}'
aaaaaaaa
[root@VM-12-14-centos ~]# echo $?
0
[root@VM-12-14-centos ~]# echo "aaaddddd" | grep '^a\{5\}'
[root@VM-12-14-centos ~]# echo $?
1
贪婪:尽可能多的去匹配(大前提:匹配成功)
a*: 0-任意多
a?:0-?
a+:1-任意
a{n,m}: n-m