4. 使用UEFI Shell命令
任务目标
在UEFI Shell环境中,通过实际操作掌握常用命令(ls、cd、edit)的用法,并编写一个可执行的Shell脚本(.nsh文件),实现基本的文件操作与信息显示。
环境准备
- 一台支持UEFI Shell的物理机或QEMU虚拟机(推荐使用QEMU + OVMF固件快速验证)。
- 启动进入UEFI Shell(在OVMF启动菜单中通常有
UEFI Internal Shell选项)。 - 准备一个FAT32格式的USB驱动器或QEMU虚拟磁盘,用于存放脚本文件。
核心命令说明
| 命令 | 功能 | 示例 |
|---|---|---|
ls | 列出当前目录或指定路径下的文件与子目录 | ls FS0:\EFI |
cd | 切换当前工作目录 | cd FS0:\EFI\BOOT |
edit | 内置文本编辑器,可创建/修改文件 | edit FS0:\test.nsh |
map | 显示当前映射的文件系统设备 | map |
reset | 重启系统 | reset |
操作步骤与脚本实现
以下操作均在UEFI Shell命令行中完成。首先通过 map 确认文件系统映射(通常第一个FAT分区为 FS0:)。
1. 目录导航与文件查看
FS0:\> ls
FS0:\> cd EFI\BOOT
FS0:\EFI\BOOT> ls -l
说明:ls -l 以长格式显示文件大小与属性。若需返回上级目录,使用 cd ..。
2. 使用 edit 创建Shell脚本
执行以下命令创建脚本文件:
FS0:\> edit FS0:\myscript.nsh
在编辑器中输入以下内容,然后按 Ctrl+S 保存,Ctrl+Q 退出:
@echo -off
echo "=== UEFI Shell Script Demo ==="
echo "Current directory: %cwd%"
ls
echo "Creating a test file..."
echo "Hello from UEFI Shell" > FS0:\hello.txt
echo "File content:"
type FS0:\hello.txt
echo "Script finished."
3. 运行Shell脚本
在Shell提示符下直接输入脚本文件名(无需扩展名)即可执行:
FS0:\> myscript.nsh
验证方法与通过标准
- 脚本执行后,屏幕依次显示:
=== UEFI Shell Script Demo ===、当前目录路径、目录列表、Creating a test file...、Hello from UEFI Shell、Script finished.。 - 执行
type FS0:\hello.txt能再次看到文件内容,证明文件写入成功。 - 若脚本无法执行,检查文件是否以
.nsh结尾,且文件系统为FAT格式(UEFI Shell不识别NTFS)。
常见问题
- 脚本无法运行:确认文件编码为ASCII/UTF-8无BOM,且换行符为LF(Unix风格)。
- 找不到文件系统:在QEMU中需确保磁盘已分区并格式化为FAT32,OVMF启动时按
Esc进入固件设置,在Boot Maintenance Manager中确认启动顺序包含Shell。 - edit编辑器无响应:部分Shell版本需先加载
edit命令,可尝试help edit查看是否支持;若不支持,可用echo重定向方式创建脚本(见下方替代方案)。
替代方案:不使用edit创建脚本
若 edit 不可用,可通过逐行重定向创建脚本:
FS0:\> echo @echo -off > FS0:\myscript.nsh
FS0:\> echo echo "Hello" >> FS0:\myscript.nsh
FS0:\> echo ls >> FS0:\myscript.nsh
注意:> 创建新文件,>> 追加内容。此方法同样能生成可执行脚本。