3.shell编程之循环

2022-03-13 分类:shell编程 阅读(277) 评论(0)

孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。

1.shell循环语句-for

1.for循环基本概述

1.什么是循环

脚本在执行任务的时候,总会遇到需要循环执行的时候,比如说批量创建100个用户,我们可以使用循环来实现。

2.什么是for循环

很多人把for循环叫做条件循环,因为for循环的次数和给与的条件是成正比的,也就是你给5个条件,那么他就循环5次。

2.for循环基础语法

1.for循环语法

for 变量名 in [取值列表]
do
 要做的事情
done
#for循环示例(默认以空格做分割,给了三个条件)
for var in file1 file2 file3
do
  echo the text is $var
done

2.for循环基本使用示例

[root@fsf ~]# cat for-1.sh
#!/bin/bash
for i in {1..10}
do
  useradd test-$i
  echo test-$i is ok
done

3.for循环基本使用示例-从命令中取值

[root@fsf ~]# cat for-5.sh 
#!/bin/bash
for i in `cat /etc/hosts`
do
 echo $i
done
#for循环默认以使用空格为分隔符,可以使用IFS来自定义分隔符
#以冒号做分割符 IFS=:
#以冒号、分号和双引号作为字段分隔符 IFS=:;”
#以换行符作为字段的分隔符 IFS=$’\n’

4.for循环基本使用示例,C语言风格的for

#语法格式
for ((i=0;i<10;i++))
do
  commands
done

5.并发执行(后台运行)

[root@fsf ~]# cat for.sh 
#!/bin/sh
for i in  `seq 254`
do
      { IP=10.0.0.$i
      ping -c1 -W1 $IP &>/dev/null
      if [ $? -eq 0 ];then
       echo "$IP 在线"
      fi } &
	
done
wait###############让后台执行的结束后再向下执行
echo "在线取IP完成................"

二、shell循环语句-while

1.while循环基本概述

1.什么是while

While在shell中也是负责循环的语句,和for一样。

2.while循环和for循环怎么选?

因为功能一样,很多人在学习和工作中遇到循环到底该使用for还是while呢?很多人不知道,就会出现有人一遇到循环就使用for、有人一遇到循环就使用while。到底选for好还是while好:
1.知道循环次数的使用for,比如一天循环24次;
2.如果不知道要循环多少次,那就用while,比如猜数字游戏,每个人猜对的次数是未知的。

2.While循环基础语法

1.while循环语法

#当条件测试成立(条件测试为真),执行循环体
while 条件测试
do
   执行的循环体
done

2.while循环基本使用示例,降序输出10-1的数字

[root@fsf ~]# cat tty.sh 
#!/bin/bash
var=10
while [ $var -gt 0 ]
do
  echo  $var 
  var=$[$var-1]
done

3.嵌套循环文件比较,判断/tmp/sfy文件是否存在,如果不存在则3s输出一次notfound。如果存在则自动退出。

[root@fsf ~]# cat while_file.sh 
#!/bin/bash
while [ ! -d /tmp/sfy ]
do
 echo "not found /tmp/sfy"
 sleep 3
done

4.循环嵌套字符比较,判断用户输入的用户名,如果不是root则一直让其输入

[root@fsf ~]# cat while_string.sh
#!/bin/bash
read -p "Login: " account
while [ $account != 'root' ]
do
 read -p "Login: " account
done

5.while循环read读入

while read line     #line 是自定义的变量 while是按照行读取文件 而不是for的空格
do 
   命令
done<file.txt
#############使用示例统计文件行数
[root@fsf ~]# cat file.sh
#!/bin/sh
while read line
do
     let i++
done</etc/passwd
echo $i 行

3.while循环控制语句

在我们使用循环语句进行循环的过程中,有时候需要在未达到循环结束条件时强制跳出循环,那么shell给我们提供了内置方法来实现该功能:exit、break、continue

1.exit,退出整个程序。

当脚本碰到exit时,直接退出,剩余不管有多少代码都不执行。
[root@fsf ~]# cat for_exit.sh
#!/bin/bash
for i in {1..3}
do
  echo "123"
  exit####下面的都不会执行,直接退出
  echo "456"
done
echo "Done......"

2.break。

结束当前循环,但会执行循环之后的所有代码。
[root@fsf ~]# cat for_exit.sh
#!/bin/bash
for i in {1..3}
do
  echo "123"
  break
  echo "456"
done
echo "Done......"

3.continue。

忽略本次循环剩余的代码,直接进行下一次循环,直到循环结束,然后继续循环之后的代码。
[root@fsf ~]# cat for_exit.sh
#!/bin/bash
for i in {1..3}
do
  echo "123"
  continue
  echo "456"
done
echo "Done......"
[root@fsf ~]# sh for_exit.sh
123
123
123
Done......

ps:限制特殊信号(禁止ctrl+c和z)

trap "echo 不要乱按小心爆炸" HUP INT TSTP

评论已关闭

登录

忘记密码 ?

切换登录

注册

鲁ICP备2021019243号-1