脚本语言之Lua与Windows批处理的初步认识

1.脚本语言介绍

脚本语言是一种动态语言(数据类型不在声明的时候确定,而是在使用的时候确定),是一种编程语言,用来控制软件应用程序,脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。

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

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

2.值与类型

2.1 Lua

Lua是一种动态类型语言。这意味着变量没有类型,只有值才有类型。语言中不存在类型定义。而所有的值本身携带他们自己的类型信息。行注释 --,多行注释 --[[  ]]

Lua中有八种基本类型:nilbooleannumberstringfunctionuserdatathreadand table

nil用来描述一个无意义的值。

boolean类型只有两种值:falsetruenilfalse都能导致条件为假,而另外所有的值都被当作真。

number表示实数。

string表示一串字符的数组;字符串可以包含任何8位字符,包括结束符('\0’);字符串可以用单引号与双引号来使用。

userdata类型用来将任意C数据保存在Lua变量中,这个类型相当于一块原生的内存,userdata不能在Lua中创建出来,也不可能在Lua中修改;这样的操作只能通过C来修改,这一点保证了宿主程序完全掌管其中的数据。

thread类型用来区别独立的执行线程,它被用来实现协同例程。

table类型实现了一个关联数组,数组可以用任何东西(除nil)做索引,而不限于数字,table可以以不同类型的值构成,tablelua中唯一的一种数据结构。

2.2 Windows批处理

         Windows中的批处理也是动态语言,跟C语言中的数据类型比较相近。行注释 rem或::,C语言中的多行注释/* */也适用于批处理。

3.变量、表达式与控制结构

3.1 Lua

3.1.1  变量

Lua中有三种变量:全局变量、局部变量,还有table的域。任何变量都被假定为全局变量,除非显示的以local修饰定义;局部变量有其作用范围:局部变量可以被定义在它作用范围中的函数自由使用。在变量首次声明时,变量的值均为nil

3.1.2  表达式

1)   数学运算操作符

Lua支持常见的数学运算操作符:二元操作 +-*/%^(幂);一元操作 -。如果对数字转化成字符可以用string中的format

2)   比较操作符

Lua中的比较操作符:==~=(不等于)、<><=>=。这些操作的结果不是false就是true

3)   逻辑操作符

Lua中的逻辑操作符:andornot。和控制结构一样,所有的逻辑操作符把falsenil作为假,其他的都是真的。

4)   连接符

Lua中字符串的连接操作符:..(就是两个点)

5)   取长度操作符

取长度操作符:#。我自己测试时没有成功过,也不知道是不是版本问题。

6)   函数定义

function block endblock是语句块

3.1.3  控制结构

exp是表达式,block是语句块

1)  if

     if exp then block end;

     if exp then block elseif exp then block else block end;

2)  while

     while exp do block end;

3)  repeat

     repeat block until exp;

4)  for

      for循环有两种形式:一种是数字形式,另一种是一般形式

 l 数字形式

         数字形式跟一般C语言中的for循环比较相近。语法如下:

for name ‘=' exp ‘,' exp ‘,' exp do block end;block将把name作循环变量。从第一个exp开始起,直到第二个exp的值为止,其步长(每次变化的值)为第三个exp。更确切的说,一个for循环看起来是如下模式: for v = e1, e2, e3 block end

注意点:

         如果第三个表达式(步长)没有给出时,会把步长设为1

         你可以用break来退出for循环

 l l 一般形式

         一般形式的for通过一个叫做迭代器(iterator)的函数工作。每次迭代,迭代器函数都会被调用以产生一个新的值,当这个值为nil时循环停止。语法如下:

         for namelist in explist do block end  namelist = {Var = “”, Var1 = “”}

for语句类似如下形式

         for var_1,….,var_n in explistdo block end

等价于如下代码

         do

              local f,s,var = explist

              while true do

                    local var_1,…,var_n = f(s, var)

                    var = var_i

                    if var == nil then break end

                       block

             end

         end

需注意以下几点:

         explist 只会被计算一次。它返回三个值,一个迭代器函数,一个状态,一个迭代器的初始值。

         fs、以及var都是不可见的变量。这里给他们起的名字都只是为了解说方便。

         你可以使用break来跳出for循环

         循环变量var_i对于循环来说是一个局部变量;你不可以在for循环结束后继续使用。如果你需要保留这些值,那么就在循环结束前赋值到别的变量里去。

3.2.Windows批处理

3.2.1 变量

windows批处理的变量最常见的是环境变量,环境变量中的PATH变量在编译器的配置时会经常碰到,因为配置好PATH变量后,你在cmd(命令提示符)中输入的命令才会被执行。比如说在cmd中你输入的是xx.exe,而PATH中有xx.exe的路径,则该exe会被执行。

3.2.2 表达式

1)   比较操作符

比较操作符:==EQU(等于)、NEQ(不等于)、LSS(小于)、LEQ(小于或等于)、GTR(大于)、GEQ(大于或等于);以字符来表示比较操作时需要有空格。

2)   逻辑操作符

逻辑操作符:not,逻辑非

3.2.3  控制结构

1)   if

      if exp block;

      如果是有括弧(不是{})是固定的,格式如下两种:

      if exp (block)

      if exp (

      block)

      如果是有else时,格式也是固定模式。如下三种:

      if exp (block)else (block);

      if exp (

      block) else  (

      block);

      if exp (

      block) else (block);

2)    for

      forvar in (set)doblock;简单的实例:for %%i in (1 2 3 4 5) do echo %%i;变量i会从()中取出数据,循环5次并输出

      循环也可以用goto命令来实现。goto命令下面会提到

4.Windows批处理中的常见命令

cmd(命令提示符)中输入命令加/?会显示命令的帮助文档。如dir /?,如果在命令前加@,则该命令不会显示在cmd

4.1 rem

说明:批处理中的注释

实例:rem cd /d d:/music

4.2 cd

说明:更改目录或显示当前目录

实例:cd /d d:/music——/d跳转到指定目录下

           cd \ ——退回到当前盘的根目录

           cd .. ——退回到上一级目录

4.3 copy

说明:复制文件

实例:copy d:/music/hello.mp3 d:——复制hello.mp3D盘下

xcopy也是复制命令,但功能比copy

4.4 dir

说明:显示目录下的文件和子目录

实例:dir ——输出cmd的当前目录下的文件和子目录

4.5 del

说明:删除文件

实例:del d:/music/hello.mp3——删除指定路径下的mp3文件

4.6 md

说明:创建文件夹

实例:md file ——在cmd的当前目录下产生一个file名字的文件夹

4.7 rd

说明:删除文件夹

实例:rd file ——在cmd的当前目录下删除file名字的文件夹

4.8 ping

说明:网络中的通信协议,网络是否连通

实例:ping 127.0.0.1——本机回环地址,查明网卡是否可用

           ping 127.0.0.1 –n 10> nul——发送10个ICMP的ECHO包,可以用作延时

4.9 telnet

说明:检测端口是否被占用

实例:telnet 127.0.0.1 8080——检测8080端口是否被占用

4.10 echo

说明:显示信息

实例:echo message echo——在cmd中显示message echo信息

         echo on echo off——echo on是把它下面的命令(如ping 127.0.0.1)显示在cmd中,echo off不显示命令。如果在echo前加@,则不会显示echo on/off 命令

4.11 call

说明:调用另一个批处理,并且不终止父批处理

实例:call d:/music/music.bat——调用Dmusic文件夹下的music.bat批处理文件,执行完后再返回父批处理,也可以调用其他类型的可执行文件

4.12 start

说明:可以启动指定的命令或程序

实例:start d:/music/music.bat——异步方式调用Dmusic文件夹下的music.bat批处理文件,也可以是指定的可执行文件

4.13 set

说明:设置环境变量的值

实例:set var=variable——设置环境变量var的值为variable,设置好后查看的方式是用echo命令,如echo %var%即可得到环境变量var的值

4.14 goto

说明:跳转作用

实例::label …….goto label——顺序执行语句,当执行到goto label时跳转到:label再次顺序执行。

4.15 taskkill

说明:关闭进程

实例:taskkill /f /im notepad.exe——根据进程映像名来关闭进程

4.16 >>>

说明:输出重定向命令,>>>的区别在于>会清除原有文件,而>>只会在原有文件的基础上追加

实例:echo hello world >> hello.txt——会在cmd的当前目录下生成hello.txt文件

 

大部分windows命令来源http://hi.baidu.com/hackerlinux/item/2d5a0dd51c2e8449fb5768dc

你可能感兴趣的:(基本语法与类库的实现)