热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我的shell脚本编程

对于shell脚本编程特点来说它是过程式编程语言、脚本类型语言、解释型语言。在写脚本的时候总是会遵循三种执行结构:顺序执行结构、选择执行结构、循环执行结构。

   对于shell脚本编程特点来说它是

        过程式编程语言、脚本类型语言、解释型语言。

  在写脚本的时候总是会遵循三种执行结构:顺序执行结构、选择执行结构、循环执行结构。

   顺序执行即:以从左到右,从上到下顺序执行所有的语句(命令)

   选择执行结构:依照给定条件的逻辑判断结果或者依照可选的取值范围,进而选择某个分支中的语句来执行;

    有if:分支选择标准;逻辑判断的结果;

     case:分支选择标准;根据可选的取值;

   循环执行结构:对于某特定语句,重复执行0次,1次或多次;

   有for:遍历指定的列表

    while:根据逻辑判断的结果

    until:根据逻辑判断的结果

   select:死循环,利用循环机制提供选择列表

----------------------------------------------------------

  if结构通常来说有双分支和多分支结构

   无非就是在if下又添加了elif  例如

if CONDITION1 ; then

           STATEMENT

           ...

         elif CONDITION2 ; then

           STATEMENT

           ...

         elif CONDITION3 ; then

           STATEMENT

           ...

         ...

         else

           STATEMENT

           ...

         fi

  case 语句使用来 在给出不同的参数时做出不同的结果

    case 变量引用 in 

        模式1)

          分支1

          ;;

        摸式2)

          分支2

          ;;

        ...

        *)

          默认分支

          ;;

      esac

   在这里的模式可有很多种匹配方式

     1.普通的文本字符

     2.globbing风格的通配符

       *:任意长度任意字符

       ?:任意的单个字符

       []:范围内的任意单个字符

       [^]:范围外的任意单个字符

     3.| :或

 for 循环有两种格式

    1.遍历列表

     for VAAR_NAME in LIST ; do 

        循环体

     done

    这个列表LIST的可以:

            1):直接写出

            2): 纯整数列表

              seq:输出一个整数列表

                 seq [FIRST [INCREMENT]] LAST

            3) :花括号展开

                {FIRST..LAST}

                     {0..100..3}  显示0-100中能被3整除的数字

            4) : 命令的执行结果返回值

            5):GLOBBING(通配符)

            6): 某些变量的引用:$@,$*

     2.控制变量的格式  

       for (( 表达式1; 表达式2; 表达式3 )); do 

         ((循环体))

       done

          表达式1:为变量赋初始值

          表达式2:循环的退出条件

          表达式3:变量值的变换规律

  while、until循环:

       while CONDITION ; do

         循环体

       done

        进入循环的条件:CONDITON一直为真;

        退出循环条件:CONDITON为假

        -------------------

       until CONDITION ; do

        循环体

       done

       进入循环的条件:CONDITON一直为假;

        退出循环条件:CONDITON为真

 注意:对于while和until两个循环结构来讲,如果要实施变量增量操作,必须手动给出;

     例如:利用while和until循环结构,计算100以内所有整数和;

     #!/bin/bash

     #

     declare -i I=1

     while [ $I -le 100 ] ; do

      let SUM+=$I

      let I++

     done

对于循环语句 还有一个无限循环的用法

 while true ;do

    循环体

  done


  until false ;do

   循环体

  done


  在此类的循环结构中,必须适当的使用continue和break,以保证循环不会一直持续下去;

   continue:

    continue [n] 

     提前技术第n层的本次循环,直接进入下一轮条件判断,若符合循环进入条件,则开启下一轮循环; 

   break:

    break [n]

    提前结束第n层循环;不再继续后续循环;

  

还有一个实现遍历功能的while、until循环 用于对文件的每一行读取操作

while read LINES ; do

    循环体

  done

until ! read LINES ; do

 循环体

done


select

  select循环主要用于创建一个菜单式列表,供用户进行选择;

  列表是按照数字顺序排列的,我们只要选择数字即可;


  一般来讲,select与case一起使用;


  select是一个无限循环结构,因此,必须在循环体中使用break命令以退出循环,或者可以使用exit命令直接终止脚本。


  select NAME [in 词语 ... ;] do 命令; done


  select NAMl6E [in lsit ] ; do 

     命令 

  done

对于和用户交互式的命令read

   read命令:

    read [-a 数组] [-p 提示符] [-t 超时] [名称 ...]

    名称一般为变量名或数组名;如果不写名称,则系统会将read读到的信息保存在REPLY变量中;


    注意:在使用read命令的时候,通常会使用-t选项来规定超时时间;一旦使用-t选项定义了超时时间,我们必须在后面判断给定的变量是否为空,如果为空需要为变量提供默认值;

  


 取随机数  8以内的

      echo $[$RANDOM%8]



本文出自 “从运维开始” 博客,谢绝转载!


推荐阅读
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 使用Powershell Studio快速构建GUI应用程序
    本文介绍了如何利用Powershell Studio创建功能强大的可视化界面。相较于传统的开发工具,Powershell Studio提供了更为简便和高效的开发体验,尤其适合需要快速构建图形用户界面(GUI)的场景。 ... [详细]
  • 探讨 HDU 1536 题目,即 S-Nim 游戏的博弈策略。通过 SG 函数分析游戏胜负的关键,并介绍如何编程实现解决方案。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • CSS高级技巧:动态高亮当前页面导航
    本文介绍了如何使用CSS实现网站导航栏中当前页面的高亮显示,提升用户体验。通过为每个页面的body元素添加特定ID,并结合导航项的类名,可以轻松实现这一功能。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • 本文详细介绍了如何在 Android 中使用值动画(ValueAnimator)来动态调整 ImageView 的高度,并探讨了相关的关键属性和方法,包括图片填充后的高度、原始图片高度、动画变化因子以及布局重置等。 ... [详细]
  • 深入探讨Web页面中的锚点交互设计
    本文旨在分享Web前端开发中关于网页锚点效果的实现与优化技巧。随着Web技术的发展,越来越多的企业开始重视前端开发的质量和用户体验,而锚点功能作为提升用户浏览体验的重要手段之一,值得深入研究。 ... [详细]
author-avatar
盲人一块
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有