目录
循环
echo 命令
for 循环次数
for 第二种格式
命令举例
while
脚本举例
双重循环及跳出循环
脚本举例
更改文件和目录的后缀名的脚本
画三角形的脚本
乘法口诀表的脚本
面试例题
补充命令
let 命令
循环
—— 一定要有跳出循环的条件
-
已知循环的次数
-
未知循环的次数,但是有一个跳出的条件
echo 命令
—— echo -n 表示不换行输出
—— echo -e 表示输出转义符
转义符号 | 作用 |
---|---|
-n | 表示不换行输出 |
\e | 输出转义字符,将转义后的内容输出到屏幕上 |
\b | 转义后相当于按退格键,但前提是 b 后面存在字符;b 表示删除前一个字符,\b\b 表示删除前两个字符 |
\c | 不换行输出,当 \c 后面存在字符时,后面的字符不会被输出 |
\n | 换行,被输出的字符从 \n 除开始另起一行 |
\f 或 \v | 换行,但是换行后的新行的开头位置连接着上一行的行尾 |
\t | 转以后表示插入 tab,即横向制表符 |
\r | 光标移至行首,用后面的字符覆盖等长度的前面的字符 |
for 循环次数
—— for 名称 in 循环列表
do命令
done
—— 循环列表
-
只和循环的额外次数有关
-
有几个值,就循环几次
例
for i in a b c #for 变量名 in 循环列表
#i 为自定义,in 后面接列表循环次数,a b c 表示循环 3次
do
命令序列
done
循环列表的表项形式
[root@localhost opt]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
#将数字 1至10 全部列出
[root@localhost opt]# echo {0..10..2}
0 2 4 6 8 10
#将数字 0至10 中的偶数全部列出;从 0 开始到 10 结束,每次加 2,步长为 2
[root@localhost opt]# echo {1..10..2}
1 3 5 7 9
#将数字 0至10 中的奇数全部列出;从 0 开始到 10 结束,每次加 2,步长为 2
seq #调用命令
[root@localhost opt]# seq 5
1
2
3
4
5
[root@localhost opt]# seq 0 5
0
1
2
3
4
5
[root@localhost opt]# seq 0 2 5
0
2
4
[root@localhost opt]# seq 1 2 5
1
3
5
for 第二种格式
for ((表达式1;表达式2;表达式3)) ; do 命令 ; done
—— 表达式1 ==> 表达式2:是一个判断,如果满足表达式2 才执行 ==> 表达式3
命令举例
[root@localhost ~]# ls
anaconda-ks.cfg 公共 视频 文档 音乐
initial-setup-ks.cfg 模板 图片 下载 桌面
[root@localhost ~]# for a in * ;do echo $a ;done
anaconda-ks.cfg
initial-setup-ks.cfg
公共
模板
视频
图片
文档
下载
音乐
桌面
计算 1累计加到100 的结果
写法一
[root@localhost ~]# sum=0;a=0;for a in {1..100};do let sum+=a ;done;echo $sum
5050
写法二
[root@localhost ~]# sum=0;a=0;for a in {1..100};do sum=$[sum+a] ;done;echo $sum
5050
while
—— 为限定条件,条件则成功执行
—— while 判断条件:条件成立则继续循环,条件不成立跳出循环
脚本举例
累加求和
#!/bin/bash
a=0
b=0
until [ $a -gt 100 ]
#当 a的值并不大于100 时,因为条件不成立,所以继续循环执行,当 a的值大于100,满足条件,则跳出循环
do
b=$[a+b]
let a++
done
echo b=$b
双重循环及跳出循环
命令 | 注释 |
---|---|
break | 跳出单个循环;break n :数字 n ,代表跳出 n 层循环 |
continue | 终止某次循环中的命令,但是不会完全终止命令;continue n :数字 n ,代表跳出 n 层循环 |
exit | 直接退出脚本 |
例
#!/bin/bash
for j in {1..6}
do
if [ $j -eq 3 ]
then
break
fi
echo j=$j
done
#执行的结果
[root@localhost opt]# bash l.sh #在 j=3 的时候停止该循环命令
j=1
j=2
#!/bin/bash
for j in {1..6}
do
if [ $j -eq 3 ]
#当j的值等于3时
then
continue
#终止此次循环,但是,不会影响循环命令的后续执行
fi
echo j=$j
done
#执行的结果
[root@localhost opt]# bash l.sh #没有显示 j=3
j=1
j=2
j=4
j=5
j=6
脚本举例
更改文件和目录的后缀名的脚本
#!/bin/bash
for a in *.txt
#给a赋值任意字符加后缀名.txt
do
b=`echo $a|cut -d "." -f1`
#给b赋值,输出a 以 . 为分隔符,取后一列
mv $a ${b}.sh
#将a 的后缀名 .txt 更改为 .sh
done
画三角形的脚本
#!/bin/bash
for a in {1..9}
do
for b in `seq $a`
do
echo -e "*\c"
done
echo
done
结果展示
乘法口诀表的脚本
#!/bin/bash
for a in {1..9}
do
for b in `seq $a`
do
echo -e "${a}*${b}=$[a*b]\t\c "
done
echo
done
结果展示
面试例题
#!/bin/bash
ip=192.168.91.
for a in {1..254}
do
{
ping -c1 -W1 ${ip}${a} &>/dev/null
if [ $? -eq 0 ]
then
echo ${ip}${a} >> /opt/cunhuo
else
echo ${ip}${a} >> /opt/nocunhuo
fi
} &
done
补充命令
let 命令
符号 | 作用 |
---|---|
++ | 自身变量 +1 |
-- | 自身变量 -1 |
+=任意数值 | 自身变量 +任意数值 |
-=任意数值 | 自身变量 -任意数值 |
*=任意数值 | 自身变量 *任意数值 |
/=任意数值 | 自身变量 /任意数值 |
%=任意数值 | 自身变量 %任意数值 |