设为首页 收藏本站
查看: 1015|回复: 0

L7.3 linux shell 循环语句总结

[复制链接]

尚未签到

发表于 2018-8-29 06:49:53 | 显示全部楼层 |阅读模式
  循环语句总结
  本文详细介绍流程控制语句之循环语句,依次如下:
  1,for循环语句一般使用与特殊使用
  2,while循环语句一般使用与特俗使用的
  3,until语句使用
  4,循环控制:continue,break在循环语句中的使用
  5,函数的使用
  1,for循环语句
  for循环一般格式为:列表依次匹配变量,do后面是执行体。列表默认为一个或者多个空格或者TAB间隔
  for 变量 in 列表
  do
  command1
  command2
  ...
  commandN
  done
  示例:列出1到5数字
DSC0000.jpg

  示例:command使用命令引用
DSC0001.jpg DSC0002.jpg

  for循环的特殊用法:for((赋值;条件;运算语句))
  for ((expr1;expr2;expr3)); do
  循环体
  done
  expr1: 定义控制变量,并初始赋值;
  expr2: 循环控制条件;
  进入条件:控制条件为“真”
  退出条件:控制条件为“假”
  expr3: 修正控制变量
  示例:求100以内所有正整数之和;
DSC0003.jpg

  2,while循环语句
  while循环一般格式语法:
  while CONDTION; do
  循环体
  done
  进入条件:当CONDITION为“真”;
  退出条件:当CONDITION为“假”;
  while CONDITION; do
  循环体
  控制变量的修正表达式
  done
  示例:求100以内所有正整数之和;
DSC0004.jpg

  while循环的特殊用法:
  遍历文件的每一行:
  while read VARIABLE; do
  循环体
  done < /PATH/FROM/SOME_FILE
  示例:找出UID为偶数的所有用户,显示其用户名和ID号;
DSC0005.jpg

  3,unitl循环
  unitl循环语句格式:
  until CONDITION; do
  循环体
  循环控制变量的修正表达式
  done
  进入条件:当CONDITION为“假”时
  退出条件:当CONDITION为“真”时
  示例:求100以内所有正整数之和
DSC0006.jpg

  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使用
DSC0007.jpg

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

  until使用break
DSC0009.jpg

  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
DSC00010.jpg




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-557881-1-1.html 上篇帖子: Linux 基础知识:Bash Shell 内置命令 下篇帖子: centos6的 shell基础学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表