您的位置:首页 > 运维架构 > Shell

L7.3 linux shell 循环语句总结

2015-09-17 11:37 513 查看
循环语句总结
本文详细介绍流程控制语句之循环语句,依次如下:
1,for循环语句一般使用与特殊使用

2,while循环语句一般使用与特俗使用的
3,until语句使用
4,循环控制:continue,break在循环语句中的使用
5,函数的使用
1,for循环语句for循环一般格式为:列表依次匹配变量,do后面是执行体。列表默认为一个或者多个空格或者TAB间隔

for 变量 in 列表
do
command1
command2
...
commandN
done

示例:列出1到5数字



示例:command使用命令引用





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

for ((expr1;expr2;expr3)); do循环体done

expr1: 定义控制变量,并初始赋值;expr2: 循环控制条件;进入条件:控制条件为“真”退出条件:控制条件为“假”expr3: 修正控制变量

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





2,while循环语句while循环一般格式语法:

while CONDTION; do
循环体
done

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

while CONDITION; do
循环体
控制变量的修正表达式
done

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




while循环的特殊用法:
遍历文件的每一行:
while read VARIABLE; do
循环体
done < /PATH/FROM/SOME_FILE

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




3,unitl循环unitl循环语句格式:
until CONDITION; do
循环体
循环控制变量的修正表达式
done

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

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




4,循环控制(break,continue)

循环控制含义:
# break 命令不执行当前循环体内break下面的语句从当前循环退出.
# continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行
break
:提前结束循环;
表示跳出(结束)几层循环
continue
:提前结束本轮循环,而直接进入下一轮;
继续循环进入第几轮
循环控制的使用:

while循环:
while CONDITION; do
.......
if CONDITION2; then
break

fi
done

while CONDITION; do
......
if CONDITION2; then
continue

fi
......
done

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



死循环:
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



until使用break




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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: