日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将DOS批处理文件转换为Shell脚本

發(fā)布時間:2025/3/15 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将DOS批处理文件转换为Shell脚本 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

相當(dāng)多的在PC上學(xué)習(xí)腳本的程序員都在運(yùn)行DOS. 事實上, 殘廢的DOS批處理文件語言還是可以編寫出一些比較強(qiáng)大的腳本來的, 雖然它們一般都需要借助于外部的工具. 所以說, 某些時候, 我們還是需要將老式的DOS批處理文件轉(zhuǎn)換為UNIX shell腳本. 一般來說, 做這種事情并不困難, 因為DOS批處理文件操作不過是等價的shell腳本的一個受限子集.


表格 L-1. 批處理文件關(guān)鍵字 / 變量 / 操作符, 和等價的shell符號

批處理文件操作符Shell腳本等價符號含義
%$命令行參數(shù)前綴
/-命令選項標(biāo)記
\/目錄路徑分隔符
===(等于)字符串比較測試
!==!!=(不等)字符串比較測試
||管道
@set?+v不打印當(dāng)前命令
**文件名"通配符"
>>文件重定向(覆蓋)
>>>>文件重定向(附加)
<<重定向stdin
%VAR%$VAR環(huán)境變量
REM#注釋
NOT!取反
NUL/dev/null"黑洞"用來阻止命令輸出
ECHOecho打印(Bash中有更多選項)
ECHO.echo打印空行
ECHO OFFset?+v不打印后續(xù)的命令
FOR %%VAR IN (LIST) DOfor var in [list]; do"for"循環(huán)
:LABEL沒有等價物(多余)標(biāo)簽
GOTO沒有等價物(使用函數(shù))跳轉(zhuǎn)到腳本的另一個位置
PAUSEsleep暫停或等待一段時間
CHOICEcase or select菜單選擇
IFifif條件語句
IF EXIST?FILENAMEif [ -e filename ]測試文件是否存在
IF !%N==!if [ -z "$N" ]參數(shù)"N"是否存在
CALLsource命令或.(點操作符)"include"另一個腳本
COMMAND /Csource命令或.(點操作符)"include"另一個腳本(與CALL相同)
SETexport設(shè)置一個環(huán)境變量
SHIFTshift左移命令行參數(shù)列表
SGN-lt或-gt(整形)符號
ERRORLEVEL$?退出狀態(tài)
CONstdin"控制臺"(stdin)
PRN/dev/lp0(一般的)打印設(shè)備
LPT1/dev/lp0第一個打印設(shè)備
COM1/dev/ttyS0第一個串口

批處理文件一般都包含DOS命令. 我們必須把它轉(zhuǎn)換為UNIX的等價命令, 這樣我們才能把批處理文件轉(zhuǎn)換為shell腳本文件.?


表格 L-2. DOS命令與UNIX的等價命令

DOS命令UNIX等價命令效果
ASSIGNln鏈接文件或目錄
ATTRIBchmod修改文件權(quán)限
CDcd更換目錄
CHDIRcd更換目錄
CLSclear清屏
COMPdiff, comm, cmp文件比較
COPYcp文件拷貝
Ctl-CCtl-C中斷(信號)
Ctl-ZCtl-DEOF(文件結(jié)束)
DELrm刪除文件
DELTREErm -rf遞歸刪除目錄
DIRls -l列出目錄內(nèi)容
ERASErm刪除文件
EXITexit退出當(dāng)前進(jìn)程
FCcomm, cmp文件比較
FINDgrep在文件中查找字符串
MDmkdir新建目錄
MKDIRmkdir新建目錄
MOREmore分頁顯示文本文件
MOVEmv移動文件
PATH$PATH可執(zhí)行文件的路徑
RENmv重命名(移動)
RENAMEmv重命名(移動)
RDrmdir刪除目錄
RMDIRrmdir刪除目錄
SORTsort排序文件
TIMEdate顯示系統(tǒng)時間
TYPEcat將文件輸出到stdout
XCOPYcp(擴(kuò)展的)文件拷貝

?

事實上, 幾乎所有的UNIX和shell操作符, 還有命令都有許多的選項, 對比DOS和批處理文件來說, 它們要強(qiáng)大的多. 許多DOS批處理文件都需要依靠輔助工具, 比如ask.com, 這是一個比read命令差很多的類似副本.

DOS對于文件名通配符擴(kuò)展支持的非常有限, 并且很不完整, 僅僅識別*?.

將DOS批處理文件轉(zhuǎn)換為sehll腳本, 通常是一件很簡單的事情, 而且轉(zhuǎn)換的結(jié)果通常都比原始的批處理文件好.?


例子 L-1. VIEWDATA.BAT: DOS批處理文件

1 REM VIEWDATA2 3 REM 靈感來自于例子"DOS POWERTOOLS"4 REM PAUL SOMERSON編寫5 6 7 @ECHO OFF8 9 IF !%1==! GOTO VIEWDATA10 REM 如果沒有命令行參數(shù)...11 FIND "%1" C:\BOZO\BOOKLIST.TXT12 GOTO EXIT013 REM 打印出字符串匹配的行, 然后退出. 14 15 :VIEWDATA16 TYPE C:\BOZO\BOOKLIST.TXT | MORE17 REM 顯示整個文件, 一次一頁. 18 19 :EXIT0

轉(zhuǎn)換腳本作了一些改進(jìn).?


例子 L-2. viewdata.sh: 轉(zhuǎn)換自VIEWDATA.BAT的shell腳本

1 #!/bin/bash2 # viewdata.sh3 # 轉(zhuǎn)換自VIEWDATA.BAT的shell腳本. 4 5 DATAFILE=/home/bozo/datafiles/book-collection.data6 ARGNO=17 8 # @ECHO OFF 這個命令在這里就不需要了. 9 10 if [ $# -lt "$ARGNO" ] # IF !%1==! GOTO VIEWDATA11 then12 less $DATAFILE # TYPE C:\MYDIR\BOOKLIST.TXT | MORE13 else14 grep "$1" $DATAFILE # FIND "%1" C:\MYDIR\BOOKLIST.TXT15 fi 16 17 exit 0 # :EXIT018 19 # 跳轉(zhuǎn), 標(biāo)簽, 還有其他一些小手段, 在shell腳本中就不需要了. 20 # 我們可以說, 轉(zhuǎn)換后的腳本比原始批處理文件好的多, 21 #+ 它更短, 看起來更整潔, 更優(yōu)雅.

Ted Davis的Shell Scripts on the PC站點上有許多關(guān)于老式的批處理文件編程的教程, 他使用的某些獨(dú)創(chuàng)性的技術(shù), 和shell腳本有異曲同工之妙.

總結(jié)

以上是生活随笔為你收集整理的将DOS批处理文件转换为Shell脚本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。