祝福男人的成语高雅:将DOS批处理文件转换为Shell脚本
来源:百度文库 编辑:中财网 时间:2024/05/03 03:59:58
Appendix L. 将DOS批处理文件转换为Shell脚本
相当多的在PC上学习脚本的程序员都在运行DOS. 事实上, 残废的DOS批处理文件语言还是可以编写出一些比较强大的脚本来的, 虽然它们一般都需要借助于外部的工具. 所以说, 某些时候, 我们还是需要将老式的DOS批处理文件转换为UNIX shell脚本. 一般来说, 做这种事情并不困难, 因为DOS批处理文件操作不过是等价的shell脚本的一个受限子集.
表格 L-1. 批处理文件关键字 / 变量 / 操作符, 和等价的shell符号
%
$命令行参数前缀/
-命令选项标记\
/目录路径分隔符==
=(等于)字符串比较测试!==!
!=(不等)字符串比较测试|
|管道@
set +v
不打印当前命令*
*文件名"通配符">
>文件重定向(覆盖)>>
>>文件重定向(附加)<
<重定向stdin%VAR%
$VAR环境变量REM
#注释NOT
!取反NUL
/dev/null"黑洞"用来阻止命令输出ECHO
echo打印(Bash中有更多选项)ECHO.
echo打印空行ECHO OFF
set +v
不打印后续的命令FOR %%VAR IN (LIST) DO
for var in [list]; do"for"循环:LABEL
没有等价物(多余)标签GOTO
没有等价物(使用函数)跳转到脚本的另一个位置PAUSE
sleep暂停或等待一段时间CHOICE
case or select菜单选择IF
ifif条件语句IF EXIST FILENAME
if [ -e filename ]测试文件是否存在IF !%N==!
if [ -z "$N" ]参数"N"是否存在CALL
source命令或.(点操作符)"include"另一个脚本COMMAND /C
source命令或.(点操作符)"include"另一个脚本(与CALL相同)SET
export设置一个环境变量SHIFT
shift左移命令行参数列表SGN
-lt或-gt(整形)符号ERRORLEVEL
$?退出状态CON
stdin"控制台"(stdin)PRN
/dev/lp0(一般的)打印设备LPT1
/dev/lp0第一个打印设备COM1
/dev/ttyS0第一个串口批处理文件一般都包含DOS命令. 我们必须把它转换为UNIX的等价命令, 这样我们才能把批处理文件转换为shell脚本文件.
表格 L-2. DOS命令与UNIX的等价命令
ASSIGN
ln链接文件或目录ATTRIB
chmod修改文件权限CD
cd更换目录CHDIR
cd更换目录CLS
clear清屏COMP
diff, comm, cmp文件比较COPY
cp文件拷贝Ctl-C
Ctl-C中断(信号)Ctl-Z
Ctl-DEOF(文件结束)DEL
rm删除文件DELTREE
rm -rf递归删除目录DIR
ls -l列出目录内容ERASE
rm删除文件EXIT
exit退出当前进程FC
comm, cmp文件比较FIND
grep在文件中查找字符串MD
mkdir新建目录MKDIR
mkdir新建目录MORE
more分页显示文本文件MOVE
mv移动文件PATH
$PATH可执行文件的路径REN
mv重命名(移动)RENAME
mv重命名(移动)RD
rmdir删除目录RMDIR
rmdir删除目录SORT
sort排序文件TIME
date显示系统时间TYPE
cat将文件输出到stdoutXCOPY
cp(扩展的)文件拷贝事实上, 几乎所有的UNIX和shell操作符, 还有命令都有许多的选项, 对比DOS和批处理文件来说, 它们要强大的多. 许多DOS批处理文件都需要依靠辅助工具, 比如ask.com, 这是一个比read命令差很多的类似副本.
DOS对于文件名通配符扩展支持的非常有限, 并且很不完整, 仅仅识别*和?.
将DOS批处理文件转换为sehll脚本, 通常是一件很简单的事情, 而且转换的结果通常都比原始的批处理文件好.
例子 L-1. VIEWDATA.BAT: DOS批处理文件
1 REM VIEWDATA 2 3 REM 灵感来自于例子"DOS POWERTOOLS" 4 REM PAUL SOMERSON编写 5 6 7 @ECHO OFF 8 9 IF !%1==! GOTO VIEWDATA 10 REM 如果没有命令行参数... 11 FIND "%1" C:\BOZO\BOOKLIST.TXT 12 GOTO EXIT0 13 REM 打印出字符串匹配的行, 然后退出. 14 15 :VIEWDATA 16 TYPE C:\BOZO\BOOKLIST.TXT | MORE 17 REM 显示整个文件, 一次一页. 18 19 :EXIT0
转换脚本作了一些改进.
例子 L-2. viewdata.sh: 转换自VIEWDATA.BAT的shell脚本
1 #!/bin/bash 2 # viewdata.sh 3 # 转换自VIEWDATA.BAT的shell脚本. 4 5 DATAFILE=/home/bozo/datafiles/book-collection.data 6 ARGNO=1 7 8 # @ECHO OFF 这个命令在这里就不需要了. 9 10 if [ $# -lt "$ARGNO" ] # IF !%1==! GOTO VIEWDATA 11 then 12 less $DATAFILE # TYPE C:\MYDIR\BOOKLIST.TXT | MORE 13 else 14 grep "$1" $DATAFILE # FIND "%1" C:\MYDIR\BOOKLIST.TXT 15 fi 16 17 exit 0 # :EXIT0 18 19 # 跳转, 标签, 还有其他一些小手段, 在shell脚本中就不需要了. 20 # 我们可以说, 转换后的脚本比原始批处理文件好的多, 21 #+ 它更短, 看起来更整洁, 更优雅.
Ted Davis的Shell Scripts on the PC站点上有许多关于老式的批处理文件编程的教程, 他使用的某些独创性的技术, 和shell脚本有异曲同工之妙.
如何将DOS转换为WINDOWS
如何将winxp转换为dos?
如何将pri dos转换为ext dos
一个bash shell脚本的第一行是什么 命令为???
shell脚本的问题~~~~~~~~~~
执行shell 脚本
如何将运行中命令保存为DAT批处理文件
将分区转换为NTFS后DOS下的工具还能用吗?
ms-dos 批处理文件
怎么样进行DOS批处理文件
MS-DOS 批处理文件是什么
DOS-批处理文件(.bat)
MS-DOS批处理文件
什么是MS-DOS批处理文件
将rm转换为asf
SQL中删除DOS-shell
MS-DOS批处理文件的疑问?
怎么新建一个DOS批处理文件
DOS的批处理文件怎样写?
将FLASH,swf格式转换为fla格式后,里面的ActionScript怎么都变成乱码了啊,如何才能看到脚本啊..急~~~~
如何用shell脚本读写文件
关于LINUX SHELL脚本的问题 帮帮忙
如何将MP3转换为MIDI
如何将raw系统转换为fat