Shell编程之循环语句(for、while、until循环语句)
一、
1. 常用的转义字符如下:
\b 转义后相当于按退格键(backspace),但前提是“\b”后面存在字符;“\b”表示删除前一个字符;“\b”表示删除前一个字符;“\b\b”表示删除前两个字符。
\c 不换行输出,在“\c”后面不存在字符的情况下,作用相当于 echo -n;
但是当“\c”后面仍然存在字符时,“\c”后面的字符将不会被输出
\n 换行,被输出的字符从“n”处开始另起一行。
\f 换行,但是换行后的新行的开头位置连接着上一行的行尾;
\v 与\f 相同
\t 转以后表示插入tab,即横向制表符;
\r 光标移至行首,但不换行,相当于使用“\r”以后的字符覆盖“\r”之前同等长度的字符;但是当“\r”后面不存在任何字符时,“\”前面的字符不会被覆盖
\\ 表示插入“\”本身;
echo -n 表示不换行输出
echo -e 输出转义字符,将转义后的内容输出到屏幕上
(1)\b ( “\b”后面存在字符 ),如下两个例子:
(2)\c 不换行输出,在“\c”后面不存在字符的情况下
(3)\n 换行,被输出的字符从“n”处开始另起一行
(4) f 换行,但是换行后的新行的开头位置连接着上一行的行尾;
(5)\v 与\f 相同
(6)\t 转以后表示插入tab,即横向制表符;
(7)\r 光标移至行首,但不换行,相当于使用“\r”以后的字符覆盖“\r”之前同等长度的字符;但是当“\r”后面不存在任何字符时,“\”前面的字符不会被覆盖
(8)\\ 表示插入“\”本身;
2.
i=`echo "11,22,33,44"`
echo ${i%,*}
11,22,33
\\从最后倒数到最短的匹配部分(用%)后面的逗号的地方被删除
echo ${i%%,*}
11
\\从最后倒数到最长的匹配部分(用%%)后面的逗号的地方都被删除
echo ${i#*,}
22,33,44
\\从开头到最短的匹配部分(用#)后面的逗号的地方被删除
echo ${i#*,}
44
\\从开头到最长的匹配部分(用##)后面的逗号的地方被删除
二、循环语句
- for 语句循环
- while 语句
- until 循环语句
1. for语句的结构
- 读取不同的变量值,用来逐个执行同一组命令
示例:
for ((i=1; i<=10; i++))
for i in 取值列表
for i in 1 2 3 4 5 6 7 8 9 10
do
done
同样使用 seq 命令也有同样的效果。
for语句的结构
for 语句应用示例
- 示例1
- 批量添加用户
- 用户名存放在 users.txt 文件中,每行一个
- 初始密码均设为123456
- 验证脚本
(1)先创建几个用户 vim users.txt
polo g #如果polo 和 g之间有空格,则表示两个用户(下面验证信息里查看详情)
TS
XXXTENTACION
Pharaoh
Shawn
(2)获取 users.tx 里面的信息
(3)再写个脚本 vim adduser.sh
(4)给权限,验证脚本
(5)查看用户是否添加成功 vim /etc/passwd
(6)查看用户密码是否创建成功 vim/etc/shadow
示例2:
- 根据IP地址检查主机状态
- IP地址存放在ipadds.txt文件中,每行一个
- 使用ping命令检测各主机的连通性
1. vim ipadds.txt 输入几个IP地址
2. 再写个ping命令的脚本 vim ping.sh
3. 给权限、验证
2. while语句的结构
- 重复测试某个条件,只要条件成立则反复执行
while 语句用于示例
示例1:
- 批量添加用户
- 用户名称以stu开头,按数字顺序进行编号
- 一共添加20个用户,即stu1、stu2、......、stu20
- 初始密码均设为123456
1. 添加用户,设置初始密码
2. 赋给 useradd2.sh 权限并验证
示例2:
- 猜商品价格游戏
- 通过变量RANDOM获得随机数
- 提示用户猜测并记录次数,猜中后退出循环
首先RANDOM的值是随机的
1. 编辑脚本
2. 给权限
3. 验证
3. until 语句的结构
- 重复测试某个条件,只要条件不成立则反复执行
示例:
until 语句应用示例
示例1:
- 计算1~50的和值
- 通过循环累加的方式计算1~50的和值