自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)
1. 循环前先了解echo
的使用
1.1 echo -n
表示不换行输出
1.2 echo -e
输出转义字符,将转义后的内容输出到屏幕上
常见的转义字符有:
1.2.1 \b
相当于退格键
转义后相当于退格键(backspace),但是前提是“\b”存在字符。“\b”表示删除前一个字符,“\b\b”表示删除前面两个字符。
1.2.2 \c
不换行输出
不换行输出,在“\c”后面不存在字符的情况下,作用相当于echo -n
,但是当“\b”后面仍然存在字符时,“\c”后面的字符将不会被输出。
1.2.3 \n
换行输出
换行输出,被输出的字符从"\n"出开始另起一行。
1.2.4 \f
、\v
换行输出
换行输出,但是换行后新行的开头位置连接着上一行的行尾。
“\v”的输出结果和“\f” 一样
1.2.5 \t
制表符显示
转义后表示插入横向制表符,即tab。
1.2.6 \r
光标移至行首不换行
光标移至行首,但是不换行,相当于使用“\r”之后的字符覆盖“\r”之前同等长度的字符,但是当“\r”后面不存在任何字符时,“\r”前面的字符不会被覆盖;当“\r”后面存在的字符大于前面时,“\r”前面的字符全部会被后面替代,按后面字符的长度。
1.2.7 \\
表示符号本身
在转义符前面加入转义符,代表将后面的转义符转义为符号本身,也就是 \ 。
案例:使用echo直接将yum本地源的配置命令重定向到配置文件内。
1.2.8 echo
的其他用法,删除和获取字符串的内容
删除字符的方法
截取字符的方法:
增加字符串的方法:
2. for循环
for循环经常使用在已经知道要进行多少次循环的场景
1.语法:
for 变量名in 取值列表
do
命令序列
done
2.练习实例:循环出0到10之间(包括10)的整数
实例:由于系统上面的各种账号都是写在/etc/passwd内的第一个字段,通过管道命令cut识别出单纯的账号名称号,以id分别检查用户的标识符和特殊参数。知识点:截取文件的字段。这个操作还可以用在每个账号的删除。
3. while循环和until循环
while循环可以不断的执行某个程序,直到用户设置的条件完成为止,所以重点是条件,这种不定循环最常见的就是下面这两种格式了。
1.格式:
while循环:while的中文是【当…时】,所以这种方式说的是,当判断式/命令序列的条件成立时,就进行循环,直到命令序列/程序段落的条件不成立才停止。
4. 嵌套循环
在循环内部再使用一个循环称为嵌套循环
#!/bin/bash
for ((i=1;i<5;i++))
do
echo 此${i}为外部循环
for((j=1;j<4;j++))
do
echo -e "\t此${j}为内部循环"
done
done
5. 循环语句中的break、exit和continue
5.1 break的使用
当满足条件的情况下break会跳出当前循环体,如下
#!/bin/bash
for ((i=1;i<5;i++))
do
echo 此${i}为外部循环
for((j=1;j<4;j++))
do
if [ $j -eq 3 ] <------如果j的值为3
then
break <------跳出当前循环(内部)
fi
echo -e "\t此${j}为内部循环"
done
done
5.2 exit的使用
当满足条件的情况下exit会直接退出当前脚本,如下
#!/bin/bash
for ((i=1;i<5;i++))
do
echo 此${i}为外部循环
for((j=1;j<4;j++))
do
if [ $j -eq 3 ] <------如果j的值为3
then
exit <------结束当前脚本
fi
echo -e "\t此${j}为内部循环"
done
done
5.3 continue的使用
continue中止某次循环中的命令,但不会完全中止整个命令,如下:
#!/bin/bash
for ((i=1;i<5;i++))
do
echo 此${i}为外部循环
for((j=1;j<4;j++))
do
if [ $j -eq 2 ] <------如果j的值为2
then
continue <------中止循环中本次的命令,但不会完全中止整个循环或脚本
fi
echo -e "\t此${j}为内部循环"
done
done