jydg 发表于 2018-8-29 06:49:53

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数字

  示例: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
  自定义函数状态返回值:
  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
  
# ./test.sh start
  
Starting test.sh ok...
  
# cd /var/lock/subsys/
  
# ls
  
networktest.sh                        #start创建了test.sh文件
  
# cd -
  
# ./test.sh stop
  
# cd -
  
# ls
  
network                                  #stop删除了test.sh文件
  
# cd -
  
# ./test.sh restart
  
# cd -
  
# ls
  
networktest.sh                           #restart执行了先删除再创建test.sh文件
  函数模块化调用
  模块化编程
  功能:把脚本文件中的代码分隔为多段,放在不同的文件中
  假设/root/bin/srv目录有两个文件:
  (1) 函数文件
  (2) 脚本文件
  为脚本使用配置文件
  一个文件中只定义变量
  脚本文件source此变量定义的文件
  变量的作用域:
  局部变量:
  local VARIABLE=value
  存活时间:
  函数执行开始,至函数返回结束;
  示例:test01.sh函数定义变量,test02.sh脚本引用test01.sh



页: [1]
查看完整版本: L7.3 linux shell 循环语句总结