shell 脚本循环语句

目录

循环

echo 命令

for 循环次数

for 第二种格式

命令举例

while

脚本举例

双重循环及跳出循环

脚本举例

更改文件和目录的后缀名的脚本

画三角形的脚本

乘法口诀表的脚本

面试例题

补充命令

let 命令


循环

—— 一定要有跳出循环的条件

  1. 已知循环的次数

  2. 未知循环的次数,但是有一个跳出的条件

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

shell 脚本循环语句_第1张图片

命令举例

[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

结果展示

shell 脚本循环语句_第2张图片

乘法口诀表的脚本

#!/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

结果展示

shell 脚本循环语句_第3张图片

面试例题

shell 脚本循环语句_第4张图片

#!/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
+=任意数值 自身变量 +任意数值
-=任意数值 自身变量 -任意数值
*=任意数值 自身变量 *任意数值
/=任意数值 自身变量 /任意数值
%=任意数值 自身变量 %任意数值

你可能感兴趣的:(linux,运维,服务器)