文章目录
一、for循环语句
- for语句需要定义一个变量和取值列表,根据不同的取值执行相同的命令,直到变量值用完。
- 取值列表里包含多个属性相同的对象,例如:IP地址,通信录等。
1. 语句结构:
for 变量名 in 取值列表
do
命令序列
done
2. 入门小例子1:求1到100的和
#!/bin/bash
sum=0
for i in {1..100} #取值也可表示为((i=1; i<=100; i++))
do
sum=$[$i+$sum]
done
echo "1-100的和为:$sum
3. 入门小例子2:批量添加用户
(用户名存放在users.txt文件中,每行一个;初始密码均设为“666666”)
#!/bin/bash
a=`cat /root/users.txt`
for i in $a
do
useradd $i
echo "666666" | passwd --stdin $i
done
4. 入门小例子3:测试主机是否通信
#!/bin/bash
for i in 192.168.100.{10..60..10}
do
ping -c 3 -W 2 $i &>/dev/null
if [ $? -eq 0 ]
then
echo "$i online"
else
echo "$i offline"
fi
done
# 也可同上个例子的做法 将主机写入到一个文件中 然后用一个变量直接取值 再赋值给变量i
二、while循环语句
- 根据特定条件反复执行一个命令序列,直到不满足条件为止。
- 编写时可能会出现死循环,要避免这种情况发生
- true(真)和false(假)为特殊条件测试操作,也可以在if语句的条件测试中使用。
- true作为条件时,表示条件永远成立,无限执行,也就是死循环,需要强制终止
- false作为条件时,表示条件不成立,不执行命令序列
1. 语句结构
结构同for语句类似
while 条件测试操作
do
命令序列
done
2. 入门练习小例子1:求1到100的和
#!/bin/bash
i=0 #定义初始值 结合循环范围
sum=0
while [ $i -le 100 ]
do
sum=$[$sum+$i]
let i++ # 若不指定迭代方式 将会一直循环 因为初始值始终满足循环范围
done
echo "1到100的和为:$sum"
- 可以看出同上面用for循环做的 多了 let i++ 是因为while需要手动指定迭代方式
- ps:for循环都可改用while循环;但while循环不一定都可以用for循环做
3. 入门练习小例子2:猜数游戏
通过变量RANDOM获得随机数;提示用户猜测并记录次数,猜中后退出循环
p=$[$RANDOM % 1000]
a=0
num=0
echo "猜猜神秘数字是多少"
while [ $a -eq 0 ]
do
let num++
read -p "请输入你猜的数字:" b
if [ $b -eq $p ];then
echo "恭喜,你猜对了!"
echo "您猜了$num 次"
let a++
elif [ $b -gt $p ];then
echo "你猜大了!"
elif [ $b -lt $p ];then
echo "你猜小了!"
fi
done
#ps:这只是最简单的演示,也可加一些其他语句进行优化
图中的 echo “您猜了
s
u
m
次
"
改
为
e
c
h
o
"
您
猜
了
sum 次" 改为 echo "您猜了
sum次"改为echo"您猜了num 次” 手残输错了
三、until循环语句
- 与while相反,重复测试某个条件,只要条件不成立则反复执行。
1. 入门练习小例子:求1到100的和
#!/bin/bash
#
i=0
sum=0
until [ $i -gt 100 ]
do
sum=$[$sum+$i]
let i++
done
echo "1-100的和为:$sum"
四、结束循环
1. break 跳出单个循环
示例:
#!/bin/bash
for i in {1..5}
do
echo "外循环$i"
for j in {1..10}
do
if [ $j -eq 5 ]
then
break
fi
echo " 内循环$j"
done
done
~
ontinue 中止某次循环中的命令,但不会完全中断
示例:
五、IFS字段分隔符
默认包含 空格,制表符,换行符
IFS=$' \t\n'
查看命令:set | grep IFS
可用变量赋值的方法 对此进行修改
例如:
FS.OLD=$IFS #先将原来的IFS赋给一个变量 做个备份
IFS=$'\n' # 更改为只换行
...
IFS=$IFS.OLD #还原
六、转义字符
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"前面的字符不会被覆盖
\\
#表示插入"\"本身;
示例:echo -n
示例:echo -e xxx\t