精华内容
下载资源
问答
  • 和shell及python类似,lua脚本语言也是解释性的,其变量没有类型,只有值有类型,类型有八种nil,number,boolean, string, function, thread, userdata以及table,这些基本类型中有table的概念,table是表有点类似于...

    因后面相关项目会用到lua脚本,所以从0开始学习这种脚本语言。和shell及python类似,lua脚本语言也是解释性的,其变量没有类型,只有值有类型,类型有八种nil,number,boolean, string, function, thread, userdata以及table,这些基本类型中有table的概念,table是表有点类似于c语言的数组,也可以认为是一种hash结构,所以table的使用更加灵活。

    table的定义形式为“{}”,如fruits={},这个是空表,fruits={“apple”, key=”mango”, “grape”},这个是带元素的表,其中元素apple,grape的索引是默认的1和2,我们可以使用print(fruits[1], fruits[2])打印输出,mango是通过print(fruits[“key2”])或者print(fruits.key2)输出,table默认从1开始,c和c++的数组都是从0开始的。

    了解了table,我们再说说元表metatable,元表是带有索引集合的表,可以看做是特殊的表,他可以附加到table上,改变被附加table的行为。比如有两个表,idatas={1, 2, 3}和fdatas={1.0, 2.0 ,3.0},如果我们要实现两个表的求和,用其他语言需要挨个元素进行求和,但是如果使用元表则可以比较简单的实现。

    现在我们先介绍一下元表附加到表的实现和查询方式

    t={};//普通表table,暂定位空
    mt={};//表metatable,暂停为空
    setmetatable(t, mt); // 将mt设置为t的元表
    getmetatable(t);    // 返回t的附加元表

    函数setmetatable返回的是第一个参数,所以上面的设置可以简化为t=setmetatable({},{}),前一个{}是表t,后一个{}是元表mt。默认创建的table是不包含元表的,比如执行 print(getmetatable(fruits))将返回nil。

    那么我们的元表中可以放置任何东西,系统提供的所以一般都是以“__”开头的,这些索引我们可以看做是c或c++中的函数,定义好metable中的“函数”行为后,就可以调用了。举例说明”__index”和”__newindex”,这两个是相对常用的元表索引

    __index
    __index是元表中最常用的索引,它可以包含表或函数;当你通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该table的metatable(假定有metatable)中的__index 键。如果__index包含一个表格,Lua会在表格中查找相应的键,下面是用lua(command line)交互模式演示:
    交互截图
    如图所示ta为普通表table,含有一个元素ta[“age”]或ta.age,tb是通过setmetatable返回第一个参数的”{}”,生成的table,它本身没有元素,但她有个附加的元表,附加元表__index指代的是ta。所以打印tb.age时,会去查找元表_index对应找到ta.age的值,而tb.name,则是没有。

    __index也可以包含函数
    如果__index包含一个函数的话,Lua会调用该函数,table和键会作为参数传递给函数。__index 元方法查看表中元素是否存在,如果不存在,返回结果为 nil;如果存在则由 __index 返回结果

    ta = setmetatable({key0 = "abc"}, {
      __index = function(tx, key) --tx 和key是传入参数,具体是什么需调用时才确定
        if key == "key1" then
          return "metatable_value"
        else
          return nil
        end
      end
    })
    
    print(ta.key0,ta.key1)

    执行结果为

    abc   metatable_value

    为了达到这样的目的,我们也可以将函数简化为

    ta=setmetatable({key0="abc"}, {__index={key1="metatable_value"}}
    print(ta.key0, ta.key1)

    ta获取的是setmetatable返回的第一个参数即表{key0=”abc”},ta.key0是表ta本身的元素,所以是直接打印输出,ta.key1由于ta本身没有key1这个元素,所以lua会去查找对应的元表,元表中__index包含的是个函数,lua会将ta和对应的索引key1作为第一和第二参数带入到function中,执行结果是返回打印输出metatable_value,所以在定义__index对应的function时,函数至少要包含2个参数。

    总结一下
    Lua查找一个表元素时的规则,其实就是如下3个步骤:
    1. 在表中查找,如果找到,返回该元素,找不到则继续
    2. 判断该表是否有元表,如果没有元表,返回nil,有元表则继续。
    3. 判断元表有没有__index方法,如果__index方法为nil,则返回nil;如果__index方法是一个表,则重复1、2、3;如果__index方法是一个函数,则返回该函数的返回值。

    lua元表还有一种索引是__newindex
    __newindex
    __newindex用来对表进行更新操作,给表中不存在的索引赋值是,解释器就会查找__newindex 元方法:如果存在则调用这个函数,但不进行赋值操作。
    以下实例演示了 __newindex 元方法的应用

    mymetatable = {}  --1
    mytable = setmetatable({key1 = "value1"}, { __newindex = mymetatable }) --2
    
    print(mytable.key1)  --3
    
    mytable.newkey = "新值2"  --4
    print(mytable.newkey,mymetatable.newkey)  --5
    
    mytable.key1 = "新值1"  --6
    print(mytable.key1,mymetatable.key1)  --7

    上面这段代码是摘自于,下面有部分代码也是源自此网站,借用一下。
    http://www.runoob.com/lua/lua-metatables.html

    运行结果

    value1
    nil    新值2
    新值1    nil

    下面来说明一下
    代码2,mytable是setmetatable返回的第一个参数,所以mytable={key1=value}, 所以代码3,打印输出value1。mytable设置了元表,元表中__newindex的索引值是mymetatable,mymetatable是一个空表(代码1)。
    再看代码5, 执行结果是mytable.newkey是nil不存在,mymetatable.newkey是“新值2”,我们可以敲一段代码测试,如果是普通表,只要赋新值,会立马生效

    ta={key="value"}
    ta.newkey="newvalue"
    print(ta.key, ta.newkey) --执行结果为 value   newvalue

    但由于mytable附带有元表,在执行操作是newkey本身是不存在的,所以lua去找元表对应的元方法,而不进行赋值,所以mytable.newkey实际是没有赋值,打印输出还是nil,再说一下mymetatable.newkey,我的判断是在执行mytable.newkey=”新值2”操作时,影响到了元表中__newindex指代的表mymetatable,使之由原来的空表变成{newkey=”新值2”}。具体我们可以再看一个程序

    mymetatable = {}  --1
    mytable = setmetatable({key1 = "value1"}, { __newindex = mymetatable }) --2
    
    print(mytable.key1, mymetatable.key1, mymetatable.newkey) --3
    
    mymetatable.newkey = "新值3"   --4
    
    print(mytable.newkey,mymetatable.newkey)  --5
    
    mytable.newkey = "新值2"   --6
    print(mytable.newkey,mymetatable.newkey)  --7
    
    mytable.key1 = "新值1"    --8
    print(mytable.key1,mymetatable.key1) --9

    执行结果为:

    value1  nil     nil
    nil     新值3
    nil     新值2
    新值1 nil

    代码段4,给mymetatable新增元素newkey为”新值3”,执行代码5打印输出,证明元素添加成功,执行代码6后,此时mymetatable的newkey值已经变化,通过代码7打印可以看到值已经变为”新值2”。
    代码8和9显示mytable中key1是存在的,所以更新后值是直接到位的,不去调用元方法__newindex。

    如果想要实现已存在索引值的更新,请使用rawset函数

    mytable = setmetatable({key1 = "value1"}, {
      __newindex = function(mytable, key, value)
            rawset(mytable, key, "\""..value.."\"")
    
      end
    })
    
    mytable.key1 = "new value"
    mytable.key2 = 4
    
    print(mytable.key1,mytable.key2)

    执行结果为

    new value    "4"

    除_index 和__newindex外,还有其他的索引操作
    模式 描述
    __add 对应的运算符 ‘+’.
    __sub 对应的运算符 ‘-‘.
    __mul 对应的运算符 ‘*’.
    __div 对应的运算符 ‘/’.
    __mod 对应的运算符 ‘%’.
    __unm 对应的运算符 ‘-‘.
    __concat 对应的运算符 ‘..’.
    __eq 对应的运算符 ‘==’.
    __lt 对应的运算符 ‘<’.
    __le 对应的运算符 ‘<=’.

    展开全文
  • Lua 常用的shell命令

    2015-04-13 16:43:00
    lua作为一种小巧的脚本语言,其函数等动作可以使用shell命令进行运行调试,以下是几个常用的shell命令。基本格式是 lua [选项参数] [脚本参数] (1)%lua 程序名.lua --直接运行lua程序 (2)%lua -i 程序名.lua...

    lua作为一种小巧的脚本语言,其函数等动作可以使用shell命令进行运行和调试,以下是几个常用的shell命令。基本格式是  lua [选项参数] [脚本参数]

    (1)%lua 程序名.lua                    --直接运行lua程序

    (2)%lua -i 程序名.lua                 --启动lua解释器,进入交互模式

    (3)dofile("程序名.lua")                --运行程序

    (4)lua -e "code"                       --直接在命令行中输入代码

    (5)lua -l a                               --加载库文件a

     

    转载于:https://www.cnblogs.com/wktwj/p/4422567.html

    展开全文
  • 今天一直在研究脚本语言语言之类的问题,上午正好有机会和大家共享一下. 脚本语言:Shell , JavaScript、VBScript、...工作控制语言和shell Shell 脚本 此类脚本用于自动化工作控制,即启动和控制系统程序的...

    今天一直在研究脚本语言语言之类的问题,上午正好有机会和大家共享一下.

     

        脚本语言:Shell , JavaScript、VBScript、Perl、PHP、Python、Ruby、Lua

        

     

        


        

     

        

    工作控制语言和shell

        

    Shell 脚本

        

    此类脚本用于自动化工作控制,即启动和控制系统程序的行为。大多的脚本语言解释器也同时是命令行界面,如 Unix shell和MS-DOS command。其他如AppleScript,可以为系统增长脚本环境,但没有命令行界面。

        

    详细分类有:

        

    1.4NT

        

        

    3.ARexx(Amiga Rexx)

        

    4. bash

        

    5. csh

        

    6. DCL

        

    7. JCL

        

    8. ksh

        

    9.Cmd.exe batch( Windows, OS/2)

        

    10.command batch( DOS)

        

    11. REXX

        

    12. tcsh

        

    13. sh

        

    14.Winbatch

        

        

    16.Windows Script Host

        

    17. zsh

        

    GUI 脚本

        

    GUI涌现带来一种专业的控制盘算机的脚本语言。它在用户和图形界面, 菜单,按钮等之间互动。它经常用来自动化重复性动作,或设置一个标准状态。理论上它可以用来控制运行于基于GUI的盘算机上的全部 应用程序,但实际上这些语言是不是被支持还要看应用程序和操作系统本身。当通过键盘停止互动时,这些语言也被称为宏语言。

        

    详细分类有:

        

        

        

        

    应用程序定制的脚本语言

        

    许多大型的应用程序都包括根据用户需求而定制的习用脚本语言。一样地,许多电脑游戏系统使用一种自定义脚本语言来表示NPC(non-player character,non-playable character,non-player class)和游戏环境的预编程动作。

        

    此类语言通常是为一个单独的应用程序所设计,虽然它们貌似一些通用语言(如QuakeC, modeled after C),但它们有自定义的功能。

        

    详细分类:

        

    1.Action Code Script

        

        

        

    4.BlobbieScript

        

    5.Emacs Lisp

        

    6.Game Maker Language

        

        

    8.IPTSCRAE

        

    9.IRC script

        

    10. Lingo

        

    11.Matlab Embedded Language

        

    12.Maya Embedded Language

        

    13.mIRC script

        

    14.NWscript

        

    15.QuakeC

        

    16.UnrealScript

        

    17.Visual Basic for Applications

        

        

    19.ZZT-oop

        

    WEB编程脚本

        

    应用程序定制的脚本语言中有一种重要的类别,用于供给WEB页面的自定义功能。它专业处置互联网通信,使用 网页浏览器作为用户界面。当然,大多现代WEB编程语言都比较强大可以做一些通用编程。

        

    详细分类:

        

    1. ColdFusion(Application Server)

        

    2.Lasso

        

    3. Miva

        

    4. SMX

        

    5.IPTSCRAE- 一些网络开辟团队用于创立论坛的工具

        

    文本处置语言

        

    处置基于文本的记载是脚本语言最早的用途之一。如Unix's awk最早是设计来帮助系统管理员处置调用 UNIX基于文本的配置和LOG文件。Perl最早是用来发生呈文的,当初它已经成了全面成熟的语言。

        

    详细分类:

        

    1. Awk

        

    2. Perl

        

    3. sed

        

    4. XSLT

        

    通用动态语言

        

    一些语言,比如Perl,从一门脚本语言开展成了更通用的编程语言。由于“解释执行,内存管理,动态”等特性,它们仍被称为脚本语言。但它们已经用于应用程序编写,用户也不把它们看作脚本语言。

        

    1. APL

        

    2. Dao

        

        

        

    5. Lua

        

    6. MUMPS(M)

        

    [11]7.newLISP

        

    8. Nuva

        

    9. Perl

        

    10. PHP

        

    11. Python

        

    12. Ruby

        

    13. Scheme

        

        

    15.SuperCard

        

    16. Tcl(Tool command language)

        

    扩展/可嵌入语言

        

    少数的语言被设计通过嵌入应用程序来取代应用程序定制的脚本语言。开辟者(如使用C等其它系统语言)包入使脚本语言可以控制应用程序的hook。这些语言和应用程序定制的脚本语言是同种用途,但长处在于可以在应用程序之间传递一些技能。

        

    详细分类:

        

    1. Ch(C/C++ interpreter)

        

    2. Dao

        

    3. ECMAScript亦称DMDScript, JavaScript, JScript

        

    4.GameMonkeyScript

        

        

    6. ICI
        每日一道理
    美丽是平凡的,平凡得让你感觉不到她的存在;美丽是平淡的,平淡得只剩下温馨的回忆;美丽又是平静的,平静得只有你费尽心思才能激起她的涟漪。

        

    7. Lua

        

    8.RBScript(REALbasic Script)

        

        

    10. Tcl

        

    11.Z-Script

        

    JavaScript直到当初仍然是网页浏览器内的主要编程语言,它的ECMAScript标准化保障了它成为流行的通用嵌入性语言。

        

    Tcl作为一种扩展性语言而创立,但更多地被用作通用性语言,就如同Python, Perl, Ruby一样。

        

    其它

        

    1. BeanShell(scripting for Java)

        

    2.CobolScript

        

    3.Escapade (server side scripting)

        

        

    5.F-Script

        

    6.Ferite

        

    7. Groovy

        

    8.Gui4Cli

        

    9. Io

        

    10.KiXtart

        

    11. Mondrian

        

    12.Object REXX

        

    13. Pike

        

    14.Pliant

        

    15. REBOL

        

    16.ScriptBasic

        

    17.Shorthand Language

        

    18.Simkin

        

    19. Sleep

        

    20.StepTalk

        

    21.Visual DialogScript

        


        

        

     

        

     

        

    脚本语言又被称为扩建的语言,或者动态语言,是一种编程语言,用来控制软件应用程序,脚本通常以文本(如ASCII)保存,只在被调用时停止解释或编译。

        


        

        

    脚本语言是为了收缩传统的 编写- 编译- 链接- 运行(edit-compile-link-run)过程而创立的盘算机 编程语言。 [1]它的定名起源于一个脚本“screenplay”,每次运行都会使 对话框逐字重复。初期的脚本语言经常被称为批量处置语言或工作控制语言。 [2]

        

    一个脚本通常是解释运行而非编译。脚本语言通常都有简略、易学、易用的特性,目的就是希望能让 程序员快速实现 程序的编写工作。而宏语言则可视为脚本语言的 分支,两者也有实质上的相同之处。 [3]

        


        

        

     

        

    特色

        

    1、脚本语言(JavaScript, VBscript等)介于 HTML和C,C++,Java,C#等编程语言之间。 HTML通常用于格式化和链接文本。而编程语言通常用于向机器发出一系列庞杂的指令。

        

    2、脚本语言与 编程语言也有很多相似地方,其 函数与编程语言比较相像一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规矩更为严厉和庞杂一些.

        

    3、与程序代码的关系:脚本也是一种语言,其一样由程序代码构成。

        

    注:脚本语言一般都有相应的 脚本引擎来解释执行。 他们一般须要 解释器才能运行。 Python、JAVASCRIPT,ASP,PHP,PERL, Nuva都是脚本语言。C/C++编译、链接后,可形成独立执行的exe文件。

        

    4、脚本语言是一种解释性的语言,例如 Python、vbscript,javascript,installshield script,ActionScript等等,它不象c\c++等可以编译成二进制代码,以 可执行文件的形式存在,脚本语言不须要编译,可以直接用,由解释器来担任解释。

        

    5、脚本语言一般都是以 文本形式存在,类似于一种 命令

        

    举个例子说:如果建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件,为.aa文件的编写指定了一套规矩(语法),当别人编写了.aa文件后,自己的程序用这类规矩来懂得编写人的意图,并作出回应,那么,这一套规矩就是脚本语言。 [5]

        

    6、相对编译型盘算机编程语言:用脚本语言开辟的程序在执行时,由其所对应的解释器(或称虚拟机)解释执行。系统程序设计语言是被预先编译成机器语言而执行的。脚本语言的主要特征是:程序代码即是脚本程序,亦是最终 可执行文件。脚本语言可分为 独立型嵌入型,独立型脚本语言在其执行时完全依赖于解释器,而嵌入型脚本语言通常在编程语言中(如 CC++VBJava等)被 嵌入使用。 [1][6]

        

    7、和系统程序设计语言比拟:不同是脚本语言是被解释而系统程序设计语言是被编译。被解释的语言由于没有编译时间而供给快速的转换,通过答应用户运行时编写应用程序,而不须要耗时的编译/打包过程。解释器使应用程序更加灵活,脚本语言的代码可以被实时生成和执行。脚本语言通常都有简略、易学、易用的特性,目的就是希望能让程序设计师快速实现程序的编写工作

        


        

        

    优缺陷

        

    长处

        

    快速开辟:脚本语言极大地简化了“ 开辟部署测试调试”的周期过程。

        

    轻易部署:大多数脚本语言都可以随时部署,而不须要耗时的编译/打包过程。

        

    同已有技术的集成:脚本语言被Java或者 COM这样的组件技术所包围,因此可以有效地利用代码。

        

    易学易用:很多脚本语言的技术要求通常要低一些,因此可以更轻易地找到大量适合的技术人员。

        

    动态代码:脚本语言的代码可以被实时生成和执行,这是一项高级特性,在某些应用程序里(例如JavaScript里的动态类型)是很有用也是必需的。 [7]

        

    缺陷

        

    脚本语言不够全面:它们会要求一门“真正的”编程语言的存在,必须找一个数据库驱动程序将其内置进脚本语言里。

        

    脚本语言并不是软件工程和构建代码结构的最佳选择,例如面向对象和基于 件的开辟。

        

    脚本语言通常不是“ 通用”语言,但是可以根据 专门的应用来调整,例如: PHP万维网[7]

        


        

     

    文章结束给大家分享下程序员的一些笑话语录: 自从有了Photoshop,我再也不相信照片了!(没有Photoshop的年代,胶片照片年代做假的也不少,那时候都相信假的!)

    转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/22/3093694.html

    展开全文
  • shell脚本

    2019-03-23 16:38:42
    如被大家熟知的python脚本、JavaScript脚本和游戏领域经常使用的lua脚本以及今天要说的linux下的shell脚本,它们的共同点就是不需要编译而可以被直接解释并且执行的一种程序。脚本语言也因此被称为动态语言。 在...

    脚本的概念:

    如被大家熟知的python脚本、JavaScript脚本和游戏领域经常使用的lua脚本以及今天要说的linux下的shell脚本,它们的共同点就是不需要编译而可以被直接解释并且执行的一种程序。脚本语言也因此被称为动态语言。

    在linux下,默认的脚本语言是bash shell脚本。shell译为贝壳,在此处为linux外壳的意思。shell脚本可以理解为一些linux指令的集合。脚本在运维方向以及自动化控制中有着不可或缺的地位,许多项目需要通过脚本运行各种重复的命令来处理相关事务。以下是一个简单的shell脚本例子:

    #!/bin/bash
    
    #输出
    echo "hello bash shell!"

    #!/bin/bash 是程序的开始,必须放在shell脚本的第一行,#!用来告诉系统/bin/bash是用来执行本文件的程序。echo 是shell脚本的输出命令如C语言的printf,以上脚本简单的输出了一句hello bash shell语句。

    当在linux下使用vi命令编写并保存好一个脚本后,如hello.sh。可以通过bash hello.sh 运行此脚本。也可以通过chmod命令改变脚本的执行权限。如chmod 775 hello.sh后,可以通过./hello.sh来执行脚本。

    shell单行注释:

    除第一行#!标识解释器外,其余的#开头的语句表示单行注释。从#开始直到该行的结束为注释部分,如上文的#输出。注释不会在运行结果中打印出来,会被解释器忽略,但是通过注释可以极大的增强脚本的可读性。

    多行注释:

    #!/bin/bash
    
    :<<BLOCK
    echo "note"
    echo "lines"
    BLOCK

    使用:<<BLOCK  BLOCK 符号可以对多行命令进行注释。

    shell脚本变量与运算符

    1、变量定义与赋值操作:

    gl@gl:~$ var=hello
    gl@gl:~$ echo $var
    hello

    shell通过$符号来取一个变量中的值,如上,var存放的是hello字符串,通过$符号取出hello,然后经echo命令打印出来。

    1)赋值时,字符串直接不能有空格,否则赋值会失败。

    gl@gl:~$ var=hello world
    No command 'world' found, did you mean:
     Command 'tworld' from package 'tworld' (universe)
    world: command not found

    除非是有双引号"或者单引号'包裹起来。

    gl@gl:~$ var="hello world"
    gl@gl:~$ echo $var
    hello world

    2)单引号'和双引号的"区别
    双引号:

    gl@gl:~$ a="next"
    gl@gl:~$ b="$a again"
    gl@gl:~$ echo $b
    next again

    单引号:

    gl@gl:~$ a="next"
    gl@gl:~$ b='$a again'
    gl@gl:~$ echo $b
    $a again

    可以看到,单引号中的$a保持原样输出。而双引号中的$a会替换成其变量值。

    2、算术运算符

    gl@gl:~$ a=100
    gl@gl:~$ b=200
    gl@gl:~$ var=`expr $a + $b`
    gl@gl:~$ echo $var
    300

    通过expr关键字可以实现a变量和b变量的值相加操作。解释一下 ` (键盘感叹号的左边)符号的作用。
    即在该符号中的命令会被执行。

    常用的算术运算符
    运算符    说明    举例
    +           加法      expr $a + $b 结果为 30。
    -            减法      expr $a - $b 结果为 10。
    *            乘法      expr $a \* $b 结果为 200。
    /            除法      expr $b / $a 结果为 2。
    %          取余      expr $b % $a 结果为 0。
    =           赋值      a=$b将把变量 b 的值赋给 a。
    ==         相等      用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
    !=          不相等  用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

    3、关系运算符

    #!/bin/bash
    
    a=200
    b=200
    
    if [ $a -eq $b ]
    then
        echo true
    else
        echo false
    fi

    以上代码表示如果a的值和b的值相等,输出true,否则输出false。

    常用的关系运算符
    运算符    说明                                                          
    -eq         检测两个数是否相等,相等返回 true。    [ $a -eq $b ] 
    -ne         检测两个数是否相等,相等返回 false。  
    -gt          检测左边的数是否“大于”右边的,如果是,则返回 true。        
    -lt           检测左边的数是否“小于”右边的,如果是,则返回 true。       
    -ge        检测左边的数是否“大于等于”右边的,如果是,则返回 true。 
    -le         检测左边的数是否“小于等于”右边的,如果是,则返回 true。  

    4、布尔运算符 

    常用的布尔运算符如下
    运算符         说明                                                                   
    !    非运算,表达式为 true 则返回 false,否则返回 true。  [ ! false ] 
    -o    或运算,有一个表达式为 true 则返回 true。                [ $a -lt 20 -o $b -gt 100 ] 
    -a    与运算,两个表达式都为 true 才返回 true。                [ $a -lt 20 -a $b -gt 100 ] 

    5、字符串运算符 

    常用的字符串运算符如下
    运算符    说明                                                              
    =      检测两个字符串是否相等,相等返回 true。         [ $a = $b ] 
    !=     检测两个字符串是否相等,不相等返回 true。     [ $a != $b ] 
    -z     检测字符串长度是否为0,为0返回 true。            [ -z $a ] 
    -n     检测字符串长度是否为0,不为0返回 true。        [ -n $a ] 

    6、文件测试运算符 

    常用的文件测试运算符如下
    运算符    说明                                                                                                                      
    -b file    检测文件是否是块设备文件,如果是,则返回 true。                                [ -b $file ]
    -c file    检测文件是否是字符设备文件,如果是,则返回 true。                                        
    -d file    检测文件是否是目录,如果是,则返回 true。                                                   
    -f file    检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。   
    -g file    检测文件是否设置了 SGID 位,如果是,则返回 true。                
    -k file    检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。   
    -p file    检测文件是否是具名管道,如果是,则返回 true。                        
    -u file    检测文件是否设置了 SUID 位,如果是,则返回 true。                 
    -r file    检测文件是否可读,如果是,则返回 true。                                  
    -w file    检测文件是否可写,如果是,则返回 true。                                
    -x file    检测文件是否可执行,如果是,则返回 true。                               
    -s file    检测文件是否为空(文件大小是否大于0),不为空返回 true。    
    -e file    检测文件(包括目录)是否存在,如果是,则返回 true。             

    shell控制结构

    shell脚本的控制结构与C语言的有所不同,但是运用上大同小异。

    if-else

    #!/bin/bash
    
    var1="hello"
    var2="hello"
    
    if [ "$var1" == "$var2" ]
    then
        echo "ture"
    else
        echo "false"
    fi

    需要注意的是[ ]左右必须加空格与变量隔开。fi表示if结构的结束,如C语言中的}括号。

    for循环:

    #!/bin/bash
    
    vars="a b c d"
    for var in $vars
    do
        echo $var
    done

    gl@gl:~/shellSet$ bash if.sh 
    a
    b
    c
    d
     

    while循环:

    #!/bin/bash
    
    #输出0-100的和
    var=1
    sum=0
    while [ $var -le 100 ]
    do
        sum=`expr $var + $sum`
        var=`expr $var + 1`
    done
    echo $sum
    
    ​

    gl@gl:~/shellSet$ bash while.sh 
    5050

    for和while以do开始,done表示结束。

    case分支:

    Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,
    如果匹配成功,执行相匹配的命令。

    case语句格式如下:

    case $var in
    a)
        echo "aaa"
        ;;                   #表示一个case的结束
    b)
       echo "bbb"
        ;;
    *)                     #*表示其他
        echo "ccc"
        ;;
    esac    #表示结束

    case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。
    取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;; 。

    展开全文
  • 工作控制语言和shell Shell 脚本 此类脚本用于自动化工作控制,即启动和控制系统程序的行为。大多的脚本语言解释器也同时是命令行界面,如Unix shell和MS-DOS command。其他如AppleScript,可以为系统增加脚本环境...
  • shell脚本和常用命令

    2019-05-09 19:02:00
    常见的脚本: JavaScript(JS,前端),VBScript, ASP,JSP,PHP(后端),SQL(数据库操作语言),Perl,Shell,python,Ruby,JavaFX, Lua等。 为什么要学习使用shellShell属于内置的...
  • 一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp) 程序员的生活要一切自动化,更要幸福^_^。... 事实:就是一组shell脚本和一些工具   ...
  • 【问题背景】 前几天,我们上线了“基于’Nginx + Lua‘实现的统一权限校验功能”。...这里有个坑:当开发运维都忘记修改这个“中间配置文件”时,部署到不同的环境指向的数据源确一样的,会导...
  • [openwrt] uci 的shell和lua接口

    千次阅读 2016-09-18 16:13:32
    uci是openwrt上配置操作的接口,不管是自动化的shell脚本,还是使用luci来二次开发配置界面,都会用到这部分知识。 shell接口文档地址 ,增删改查都有,这里简单使用下。下面的配置为例子root@xCloud:~# cat /etc/...
  • 慢查询日志帮助开发运维人员定位系统存在的慢操作。慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(慢查询ID,发生时间戳,耗时,命令的详细信息)记录下来。...
  • SHELL脚本及常用命令

    2021-02-20 08:55:58
    SHELL脚本和常用命令 什么是脚本? 脚本简单地说就是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的(如可以用记事本打开查看、编辑)。 常见的脚本: JavaScript(JS,前端),VBScript, ASP,JSP...
  • 通过Shell脚本管理软件包 描述 mPKG是用Shell编写的轻量级软件包管理器。 因此,它不需要任何额外的异国情调的解释如PythonRuby,LUA ... mPKG使用任何POSIX系统中随附的标准实用程序,例如sh , grep , tar ...
  • 最近在处理一个 `Python` 局部变量的作用域问题...所以知识这个东西还是要不断“温故”,今天要总结的 `Shell` 脚本命令也是,基本属于一看就会,一写不对的状态,所以还是要把常用的操作总结到一起,方便查找复习...
  • OpenResty是一个结合了 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。...这样,Web 开发人员系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua
  • 基于Shell的Unix API Lua模块 ... 多年以来,我已经开发了一些经过良好测试的shell构造,可以在各种脚本中使用,并且已经将其浓缩为一些基本原语。 据我所知,根据POSIX,它们是安全且正确的。 尽管
  • 一、 查找字串 str="aa/aa@hun" expr i $str "/" 输出:3 二、返回子串 索引以1开头,和lua类似 ${str:pos:lenght} str="aa/aa@hun" echo${str:0:2} 输出:aa ...
  • package manhole提供了一种使用Lua shell与实时过程中已注册的Go对象进行动态交互的方法。 灵感主要来自Twisted的同名图书馆: : 用法示例: package main import ( "github.com/jtolds/go-manhole" ) type ...
  • 在接下来的多语言混合编程系列博文中,我还将和大家一起分享使用python、go以及shell(windows脚本和Linux脚本)拓展CPP应用程序的方法。 开始正题前,咱们先演示下效果。 一、项目准备 编程环境:Qt4.8.3 + ...
  • lua快速入门

    2017-09-14 10:09:00
    注意:Lua脚本的语句的分号是可选的,这个GO语言很类似。 代码如下: print("Hello World") 你可以像python一样,在命令行上运行lua命令后进入lua的shell中执行语句。 chenhao-air:lua chenha...
  • Lua简易教程

    2017-07-21 11:56:00
    注意:Lua脚本的语句的分号是可选的,这个GO语言非常类似。 复制代码代码例如以下: print("Hello World") 你能够像python一样。在命令行上执行lua命令后进入lua的shell中执行语句。 复制代码代....
  • Lua基本语法

    2018-08-25 18:07:12
    1. 运行 首先,我们需要知道,Lua是类C的,...注意:Lua脚本的语句的分号是可选的,这个GO语言很类似。 print("Hello World")   你可以像python一样,在命令行上运行lua命令后进入lua的shell中...
  • Lua简明教程

    2014-07-25 15:57:35
    注意:Lua脚本的语句的分号是可选的,这个GO语言很类似。 1 print("Hello World") 你可以像python一样,在命令行上运行lua命令后进入lua的shell中执行语句。
  • 1、全局变量局部变量,类似于shell脚本 全局变量:顾名思义,其生命有效期是全局的,整个lua文件中都可以使用,可以在任意地方定义(函数参数除外),但有个原则,使用时必须是先定义好的,否则就是nil,请看下面...
  • Lua基础教程

    2014-05-19 16:46:16
    注意:Lua脚本的语句的分号是可选的,这个GO语言很类似。 1 print("Hello World") 你可以像python一样,在命令行上运行lua命令后进入lua的shell中执行语句。
  • lua学习1

    2015-06-19 10:33:44
    参考资料http://coolshell.cn/articles/10739.html...注意:Lua脚本的语句的分号是可选的,这个GO语言很类似。 1 print(“Hello World”) 你可以像python一样,在命令行上运行lua命令后进入lua的shell中执行语句 L
  • Lua学习笔记-语法

    2019-08-10 16:26:25
    以及各大游戏引擎有很多都支持Lua脚本.以此可见Lua使用范围是很广泛的. 本篇将Lua语言和其它几种语言(PHP,JavaScript,Go,Shell,C)做对比,进行对比的记忆. Lua的语法风格和shell语言有些相似之处,...

空空如也

空空如也

1 2 3 4 5 6
收藏数 102
精华内容 40
关键字:

lua脚本和shell脚本