UEFI Shell脚本语法

脚本的语法参考:《UEFI原理与编程》
在UEFI Shell 中可以执行Shell脚本。Shell 脚本是以.nsh为扩展名的文件。

Shell脚本语法简介

1.基本语法

脚本中的每一行表示一条语句,格式:

命令  [参数1]  [参数2]  #参数为可选项
注释		:	脚本内#后面内容标识注释。
命令行参数	:  执行脚本时可以带命令行参数,最多可以带10个参数。在脚本中%n可以获得第n个参数。
环境变量		:   在脚本中%var%获得环境变量var的值。
脚本返回值	:	脚本结束时可通过Exit命令设置返回值。
					`exit  [/b]  [exit-code]`   # /b 和 exit-code是可选项
					`exit  /b`   #表示退出当前脚本;
					exit  则退出UEFI shell。使用exit退出脚本时,exit-code将被赋值给环境变量lasterror。退出一个Shell实例时,exit-code将返回给调用者。执行完一个脚本后可以通过“echo %lasterror%”在屏幕输出脚本的退出码。 

2.If条件句

if  expression  then
	语句
else 
	语句
endif 

条件表达式中,有以下几中情况:

(1)可以使用比较运算符

例: if  %lasterror%  ==  0  then
运算符含义运算符含义运算符含义运算符含义
gt大于ugt无符号值大于ge大于等于uge无符号值大于等于
lt小于ult无符号值小于le小于等于ule无符号值小于等于
ne不等于eq相等==相等

(2)可以使用逻辑运算符:and or not

例:

 if  %lasterror% ne 0 and %lasterror% ne 1   then

(3)条件语句也可使用内置的布尔函数:

IsInt、Exists、Avaliable、Profile。 这些函数返回TRUE或FALSE。

例:if Exitsts fs0:\efi\boot\startup.nsh then
布尔函数当返回值为TRUE时当返回值为FALSE时
IsInt(para)para是数字para不是数字
Exitsts file存在文件file不存在文件file
Avaliable filefile存在于path指定的目录或者当前目录当前目录和指定目录均不存在file
Profile paraPara匹配profile中某项Para不匹配profile中任一项

(4)if后面可以跟/i、/s、/i/s参数。

例 :    if  /s  %uefishellversion% == “2.0” then

/s: 强制后面的语句为字符串比较;
/i:表示字符串比较时区分大小写。

(5)条件语句可以使用函数UefiError、PiError、OemError

这些函数用于将整数转化为相应的错误码

if  %lasterror% == UefiError(8) then

3.for循环语句

两种格式:
第一种:

for %indexvar in set [;]
Endfor

set中的元素是以空格分隔的字符串或文件名。如果字符串长度小于255并且含有通配符,那么这个字符串将被当成文件名,并且在for循环执行前展开。

如:for  %a in  *.efi  readme
echo %a
endfor

假设当前目录为FS0:,目录中存在redme、set.efi、set.c、test.c、test.efi四个文件,执行上述脚本后将输入:
FS0:\set.efi
FS0:\test.efi
FS0:\readme

第二种:

for %indexvar run (start end [step])
endfor

%indexvar中的indexvar是 ’a’-’z’ 或 ‘A’ -‘Z’ 中的一个字符。
%indexvar将从start变化到end,每次递增step。Step为1或-1时可省略。

4.goto语句

goto用于跳转到标号位置处。
标号的生命是 “:”在前,标号名在后。

如:

if  not Exist %1 then
    goto FileNotFound
endif
...
:FileNotFound
exit /b 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值