shell脚本的3种循环以及相关内容
- 一、for语句
- 1.1 for语句的结构
- 1.2 for语句的实例
- 二、while循环
- 2.1 while语句的结构
- 2.2 while语句应用示例
- 三、until语句
- 3.1 until语句的结构
- 3.2 until语句应用示例
- 四、常用转义字符
- 五、补充:break和continue
- 5.1 break命令
- 5.2 continue命令
一、for语句
1.1 for语句的结构
读取不同的变量值,用来逐个执行同一组命令。
三种简单的for语句的表达方式:
方法一:(默认的取值是空格、tab、换行)
for i in {1..10 } 表示for 语句中的取值列表在1到10中取值。
for i in {1..10. .2} 表示for 语句中的取值列表在1到10中+2取值,即1、3、5、7、9。
方法二:
for i in $(seq 1 10) 表示for 语句中的取值列表在1到10中取值。
for i in $(seq1210) 表示for 语句中的取值列表在1到10中+2取值,即1、3、5、7、9。
方法三:
for ( (i=1; i<=10; i++) ) 表示for 语句中的取值列表在1到10中取值。
for ((i=1; i<=10; i+=2) ) 表示for 语句中的取值列表在1到10中+2取值,即1、3、5、7、9。
1.2 for语句的实例
1、简单的for语句实例:
#!/bin/bash
#简单for语句示例
for ((i=1; i<=3;i++))
do
echo "i"
echo "$[ $i + 1]"
echo "----------------"
2、批量添加用户
要求: ◆用户名存放在users.txt文件中,每行一个
◆初始密码均设为123456
◆验证脚本
touch users.txt #创建要求的文件
#!/bin/bash
#添加用户
for ((i=1; i<=5; i++)) #for循环创建5个用户
do
useradd meng$i #添加用户,用户名为meng1、meng2、meng3等
echo "123456" | passwd --stdin meng$i # 给添加的用户设置密码
echo "meng$i" >> /root/users.txt #把用户名存放到指定文件中
done
3、根据IP地址检查主机状态
◆IP地址存放在ipadds.txt文件中,每行一个
◆使用ping命令检测各主机的连通性
方法一:
#!/bin/bash
for a in {1..255}
do
ping -c 3 -i 0.2 -W 3 "192.168.1.$a" &> /dev/null
if [ $? -eq 0 ]
then
echo "Host 192.168.1.$a is up."
else
echo "Host 192.168.1.$a is down."
fi
done
echo "--------------------"
方法二:
#!/bin/bash
b=1
while [ $b -le 255 ]
do
ping -c 3 -i 0.2 -W 3 "192.168.1.$b" &> /dev/null
if [ $? -eq 0 ]
then
echo "Host 192.168.1.$b is up."
else
echo "Host 192.168.1.$b is down."
fi
let b++
done
二、while循环
2.1 while语句的结构
重复测试某个条件,只要条件成立反复执行
while 条件测试操作
do
命令序列
done
2.2 while语句应用示例
1、批量添加用户
◆用户名称以stu开头,按数字顺序进行编号
◆共添加20个用户,即stu1、 stu2、… ;stu20
◆初始密码均设为123456
#!/bin/bash
i=1
while [ $i le 20 ]
do
useradd stu$i
echo "123456" | passwd --stdin stu$i
let i++
done
2、猜商品价格游戏
◆通过变量RANDOM获得随机数
◆提示用户猜测并记录次数,猜中后退出循环
#!/bin/bash
b=0
c=0
a =$[$RANDOM%1000]
while [$b lt 1 ]
do
let c++
read -p "请你输入猜测的价格(1-1000)" num
if [ a lt $num ];then
echo "猜小了,再来一次。"
elif [ $num -gt $a ];then
echo "猜大了,再来一次。"
elif [ $num -eq $a ];then
echo "恭喜你,猜对了!"
b=2
fi
done
echo "你一共猜了$c次!"
注:$RANDOM是随机值,范围为1-65535
三、until语句
3.1 until语句的结构
重复测试某个条件,只要条件不成立则反复执行。
until 条件测试操作
do
命令序列
done
3.2 until语句应用示例
1、计算1~50的和值
◆通过循环累加的方式计算1~50的和值
#!/bin/bash
#1-50的和
sim=0
i=1
until [ $i -gt 50 ]
do
sum=$[$sum+$i]
let i++
done
echo "1-50的和为$sum!"
四、常用转义字符
echo -n 表示不换行输出
echo -e 输出转义字符,将转义后的内容输出到屏幕上
常用的转义字符如下: \b 转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;"\b"表示删除前一个字符,"\b\b"表示删除前两个字符。
\c 不换行输出,在"\c"后面不存在字符的情况下,作用相当于 echo -n; 但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。
\n 换行,被输出的字符从"\n"处开始另起一行。
\f 换行,但是换行后的新行的开头位置连接着上一行的行尾;
\v 与\f相同;
\t 转以后表示插入tab,即横向制表符;
\r 光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖
\\ 表示插入"\"本身;
五、补充:break和continue
5.1 break命令
break命令是跳出单个循环
实例:
#!/bin/bash
#break的示例
for ((a=1; a<5; a++))
do
echo "outer loop: $a"
for ((b=1; b<=50;b++))
do
if [ $b -eq 5 ]
then
break
fi
echo "inter loop:$b"
done
done
5.2 continue命令
continue命令是终止某次循环中的命令,但不会完全中止整个命令
#!/bin/bash
#continue的示例
for ((a=1; a<=15; a++))
do
if [ $a -gt 5 ] && [ $a -lt 10 ]
then
continue
fi
echo "current value: $a"
done