linux shell 列表循环,L7.3 linux shell 循环语句总结

循环语句总结

本文详细介绍流程控制语句之循环语句,依次如下:

1,for循环语句一般使用与特殊使用

2,while循环语句一般使用与特俗使用的

3,until语句使用

4,循环控制:continue,break在循环语句中的使用

5,函数的使用

1,for循环语句

for循环一般格式为:列表依次匹配变量,do后面是执行体。列表默认为一个或者多个空格或者TAB间隔

for 变量 in 列表

do

command1

command2

...

commandN

done

示例:列出1到5数字

cb3d1251c40b2bf114a9c4da4e45719a.png

示例:command使用命令引用

13f2a81fc74d6e9bbb5954ca2146ca1f.png71fc66dc44cebff54f645e92812734ab.png

for循环的特殊用法:for((赋值;条件;运算语句))

for ((expr1;expr2;expr3)); do

循环体

done

expr1: 定义控制变量,并初始赋值;

expr2: 循环控制条件;

进入条件:控制条件为“真”

退出条件:控制条件为“假”

expr3: 修正控制变量

示例:求100以内所有正整数之和;

sum+=i 就是将sum,i的和赋给sum

sum +=$i  就是将sum和变量$i的和赋给sum

i++和i+=1是一个意思,把i和1的和赋予i

83a046180a257e6c470b5f5fa70c31e6.png

2,while循环语句

while循环一般格式语法:

while CONDTION; do

循环体

done

进入条件:当CONDITION为“真”;

退出条件:当CONDITION为“假”;

while CONDITION; do

循环体

控制变量的修正表达式

done

示例:求100以内所有正整数之和;

5dc5a09e5404c1971578a51ef77114c5.png

while循环的特殊用法:

遍历文件的每一行:

while read VARIABLE; do

循环体

done < /PATH/FROM/SOME_FILE

示例:找出UID为偶数的所有用户,显示其用户名和ID号;

2642978322287d517d7746304e91e0b9.png

举例:

ip.txt内容如下:10.1.1.11 root 123

10.1.1.22 root 111

10.1.1.33 root 123456

10.1.1.44 root 54321

写法1:后面ip,user,pass正好要对应文件的三列,就可以单独取出列内容了cat ip.txt | while read ip user pass

do

echo "$ip--$user--$pass"

done

写法2:while read ip user pass

do

echo "$ip--$user--$pass"

done 

使用IFS作为分隔符读文件

说明:默认情况下IFS是空格,如果需要使用其它的需要重新赋值

IFS=:

例如:# cat testchen:222:gogo

jie:333:hehe# cat test.sh#!/bin/bash

IFS=:

cat test | while read a1 a2 a3

do

echo "$a1--$a2--$a3"

done

3,unitl循环

unitl循环语句格式:

until CONDITION; do

循环体

循环控制变量的修正表达式

done

进入条件:当CONDITION为“假”时

退出条件:当CONDITION为“真”时

示例:求100以内所有正整数之和

231bcaba63d9e04ea443855062b8a6a8.png

4,循环控制(break,continue)

循环控制含义:

# break 命令不执行当前循环体内break下面的语句从当前循环退出.

# continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行

break [n]:提前结束循环;[n]表示跳出(结束)几层循环

continue [n]:提前结束本轮循环,而直接进入下一轮;[n]继续循环进入第几轮

循环控制的使用:

while循环:

while CONDITION; do

.......

if CONDITION2; then

break [n]

fi

done

while CONDITION; do

......

if CONDITION2; then

continue [n]

fi

......

done

示例:求100以内所有偶数之和;continue使用

702836695b00d8f037497124e4619e30.png

死循环:

while true; do

循环体

if CONDTION; then

break

fi

done

until false; do

循环体

if CONDITION; then

break

fi

done

示例:每隔3秒钟查看当前系统上是否有名为“gentoo”的用户登录;

如果某次查看gentoo登录了,则显示gentoo已经登录;

如果未登录,就显示仍然未来,并显示这是已经是第多少次查看了;

注意break使用

while使用break

c86baf62002c4d33b50d0770ec361ae9.png

until使用break

8b40fd48ad85070919e92da5bb416c8a.png

5,函数的使用

函数使用:

function: 功能

把一段具有独立功能代码封装在一起,并给予命名;后续用到时,可直接通过给定函数名来

调用整体代码;

函数作用:代码重用;模块化编程;

函数的使用方法:

先定义:编写函数代码

后调用:给出函数名,还可按需传递参数

定义方法:

(1) function f_name {

函数体

}

(2) f_name() {

函数体

}

调用函数:

f_name [argu1, argu2, ...]

自定义函数状态返回值:

return [#]

0: 成功

1-255:失败

注意:函数代码执行时,一旦遇到return,函数代码终止运行,函数返回;

示例:执行start,stop,restart分别实现文件状态判断:

将start,stop,restart做为函数体,case使用模块调用函数。#!/bin/bash

#

prog=$(basename $0)

lockfile="/var/lock/subsys/$prog"

#echo $lockfile

if [ $# -lt 1 ]; then

echo "Usage: $prog start|stop|restart|status"

exit 1

fi

start() {

if [ -f $lockfile ]; then

echo "$prog is started yet."

else

touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog

failed..."

fi

}

stop() {

if [ -f $lockfile ]; then

rm -f $lockfile && echo "Stop $prog ok...." || echo "Stop $prog failed..."

else

echo "$prog is stopped yet."

fi

}

restart() {

if [ -f $lockfile ]; then

rm -f $lockfile && touch $lockfile && echo "Restarting $porg ok..."

else

touch $lockfile && echo "$prog is stopped, Starting $prog ok...."

fi

}

status() {

if [ -f $lockfile ]; then

echo "Running..."

else

echo "Stopped..."

fi

}

case $1 in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

status)

status

;;

*)

echo "Usage: $prog start|stop|restart|sttus"

exit 1

esac

[root@os01 /]# ./test.sh start

Starting test.sh ok...

[root@os01 /]# cd /var/lock/subsys/

[root@os01 subsys]# ls

network  test.sh                        #start创建了test.sh文件

[root@os01 subsys]# cd -

[root@os01 /]# ./test.sh stop

[root@os01 /]# cd -

[root@os01 subsys]# ls

network                                  #stop删除了test.sh文件

[root@os01 subsys]# cd -

[root@os01 /]# ./test.sh restart

[root@os01 /]# cd -

[root@os01 subsys]# ls

network  test.sh                           #restart执行了先删除再创建test.sh文件

函数模块化调用

模块化编程

功能:把脚本文件中的代码分隔为多段,放在不同的文件中

假设/root/bin/srv目录有两个文件:

(1) 函数文件

(2) 脚本文件

为脚本使用配置文件

一个文件中只定义变量

脚本文件source此变量定义的文件

变量的作用域:

局部变量:

local VARIABLE=value

存活时间:

函数执行开始,至函数返回结束;

示例:test01.sh函数定义变量,test02.sh脚本引用test01.sh

c6943c8782ec76c3dea16a8bdb51b6e3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值