📄 dosbatch.html
字号:
></TABLE><HR></DIV><P><ANAME="DOSUNIXEQUIV"></A></P><P>Batch files usually contain DOS commands. These must be translated into their UNIX equivalents in order to convert a batch file into a shell script.</P><DIVCLASS="TABLE"><HR><ANAME="AEN22241"></A><P><B>Table L-2. DOS commands and their UNIX equivalents</B></P><TABLEBORDER="1"CLASS="CALSTABLE"><THEAD><TR><THALIGN="LEFT"VALIGN="TOP">DOS Command</TH><THALIGN="LEFT"VALIGN="TOP">UNIX Equivalent</TH><THALIGN="LEFT"VALIGN="TOP">Effect</TH></TR></THEAD><TBODY><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">ASSIGN</TT></TD><TDALIGN="LEFT"VALIGN="TOP">ln</TD><TDALIGN="LEFT"VALIGN="TOP">link file or directory</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">ATTRIB</TT></TD><TDALIGN="LEFT"VALIGN="TOP">chmod</TD><TDALIGN="LEFT"VALIGN="TOP">change file permissions</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">CD</TT></TD><TDALIGN="LEFT"VALIGN="TOP">cd</TD><TDALIGN="LEFT"VALIGN="TOP">change directory</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">CHDIR</TT></TD><TDALIGN="LEFT"VALIGN="TOP">cd</TD><TDALIGN="LEFT"VALIGN="TOP">change directory</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">CLS</TT></TD><TDALIGN="LEFT"VALIGN="TOP">clear</TD><TDALIGN="LEFT"VALIGN="TOP">clear screen</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">COMP</TT></TD><TDALIGN="LEFT"VALIGN="TOP">diff, comm, cmp</TD><TDALIGN="LEFT"VALIGN="TOP">file compare</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">COPY</TT></TD><TDALIGN="LEFT"VALIGN="TOP">cp</TD><TDALIGN="LEFT"VALIGN="TOP">file copy</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">Ctl-C</TT></TD><TDALIGN="LEFT"VALIGN="TOP">Ctl-C</TD><TDALIGN="LEFT"VALIGN="TOP">break (signal)</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">Ctl-Z</TT></TD><TDALIGN="LEFT"VALIGN="TOP">Ctl-D</TD><TDALIGN="LEFT"VALIGN="TOP">EOF (end-of-file)</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">DEL</TT></TD><TDALIGN="LEFT"VALIGN="TOP">rm</TD><TDALIGN="LEFT"VALIGN="TOP">delete file(s)</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">DELTREE</TT></TD><TDALIGN="LEFT"VALIGN="TOP">rm -rf</TD><TDALIGN="LEFT"VALIGN="TOP">delete directory recursively</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">DIR</TT></TD><TDALIGN="LEFT"VALIGN="TOP">ls -l</TD><TDALIGN="LEFT"VALIGN="TOP">directory listing</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">ERASE</TT></TD><TDALIGN="LEFT"VALIGN="TOP">rm</TD><TDALIGN="LEFT"VALIGN="TOP">delete file(s)</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">EXIT</TT></TD><TDALIGN="LEFT"VALIGN="TOP">exit</TD><TDALIGN="LEFT"VALIGN="TOP">exit current process</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">FC</TT></TD><TDALIGN="LEFT"VALIGN="TOP">comm, cmp</TD><TDALIGN="LEFT"VALIGN="TOP">file compare</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">FIND</TT></TD><TDALIGN="LEFT"VALIGN="TOP">grep</TD><TDALIGN="LEFT"VALIGN="TOP">find strings in files</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">MD</TT></TD><TDALIGN="LEFT"VALIGN="TOP">mkdir</TD><TDALIGN="LEFT"VALIGN="TOP">make directory</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">MKDIR</TT></TD><TDALIGN="LEFT"VALIGN="TOP">mkdir</TD><TDALIGN="LEFT"VALIGN="TOP">make directory</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">MORE</TT></TD><TDALIGN="LEFT"VALIGN="TOP">more</TD><TDALIGN="LEFT"VALIGN="TOP">text file paging filter</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">MOVE</TT></TD><TDALIGN="LEFT"VALIGN="TOP">mv</TD><TDALIGN="LEFT"VALIGN="TOP">move</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">PATH</TT></TD><TDALIGN="LEFT"VALIGN="TOP">$PATH</TD><TDALIGN="LEFT"VALIGN="TOP">path to executables</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">REN</TT></TD><TDALIGN="LEFT"VALIGN="TOP">mv</TD><TDALIGN="LEFT"VALIGN="TOP">rename (move)</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">RENAME</TT></TD><TDALIGN="LEFT"VALIGN="TOP">mv</TD><TDALIGN="LEFT"VALIGN="TOP">rename (move)</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">RD</TT></TD><TDALIGN="LEFT"VALIGN="TOP">rmdir</TD><TDALIGN="LEFT"VALIGN="TOP">remove directory</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">RMDIR</TT></TD><TDALIGN="LEFT"VALIGN="TOP">rmdir</TD><TDALIGN="LEFT"VALIGN="TOP">remove directory</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">SORT</TT></TD><TDALIGN="LEFT"VALIGN="TOP">sort</TD><TDALIGN="LEFT"VALIGN="TOP">sort file</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">TIME</TT></TD><TDALIGN="LEFT"VALIGN="TOP">date</TD><TDALIGN="LEFT"VALIGN="TOP">display system time</TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">TYPE</TT></TD><TDALIGN="LEFT"VALIGN="TOP">cat</TD><TDALIGN="LEFT"VALIGN="TOP">output file to <TTCLASS="FILENAME">stdout</TT></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"><TTCLASS="OPTION">XCOPY</TT></TD><TDALIGN="LEFT"VALIGN="TOP">cp</TD><TDALIGN="LEFT"VALIGN="TOP">(extended) file copy</TD></TR></TBODY></TABLE><HR></DIV><DIVCLASS="NOTE"><TABLECLASS="NOTE"WIDTH="100%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="common/note.png"HSPACE="5"ALT="Note"></TD><TDALIGN="LEFT"VALIGN="TOP"><P>Virtually all UNIX and shell operators and commands have many more options and enhancements than their DOS and batch file counterparts. Many DOS batch files rely on auxiliary utilities, such as <BCLASS="COMMAND">ask.com</B>, a crippled counterpart to <AHREF="internal.html#READREF">read</A>.</P><P>DOS supports only a very limited and incompatible subset of filename <AHREF="globbingref.html">wild-card expansion</A>, recognizing just the <SPANCLASS="TOKEN">*</SPAN> and <SPANCLASS="TOKEN">?</SPAN> characters.</P></TD></TR></TABLE></DIV><P>Converting a DOS batch file into a shell script is generally straightforward, and the result ofttimes reads better than the original.</P><DIVCLASS="EXAMPLE"><HR><ANAME="VIEWDAT"></A><P><B>Example L-1. VIEWDATA.BAT: DOS Batch File</B></P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING"> 1 REM VIEWDATA 2 3 REM INSPIRED BY AN EXAMPLE IN "DOS POWERTOOLS" 4 REM BY PAUL SOMERSON 5 6 7 @ECHO OFF 8 9 IF !%1==! GOTO VIEWDATA 10 REM IF NO COMMAND-LINE ARG... 11 FIND "%1" C:\BOZO\BOOKLIST.TXT 12 GOTO EXIT0 13 REM PRINT LINE WITH STRING MATCH, THEN EXIT. 14 15 :VIEWDATA 16 TYPE C:\BOZO\BOOKLIST.TXT | MORE 17 REM SHOW ENTIRE FILE, 1 PAGE AT A TIME. 18 19 :EXIT0</PRE></TD></TR></TABLE><HR></DIV><P> The script conversion is somewhat of an improvement. <ANAME="AEN22409"HREF="#FTN.AEN22409">[1]</A> </P><DIVCLASS="EXAMPLE"><HR><ANAME="VIEWDATA"></A><P><B>Example L-2. <ICLASS="FIRSTTERM">viewdata.sh</I>: Shell Script Conversion of VIEWDATA.BAT</B></P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING"> 1 #!/bin/bash 2 # viewdata.sh 3 # Conversion of VIEWDATA.BAT to shell script. 4 5 DATAFILE=/home/bozo/datafiles/book-collection.data 6 ARGNO=1 7 8 # @ECHO OFF Command unnecessary here. 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 # GOTOs, labels, smoke-and-mirrors, and flimflam unnecessary. 20 # The converted script is short, sweet, and clean, 21 #+ which is more than can be said for the original.</PRE></TD></TR></TABLE><HR></DIV><P>Ted Davis' <AHREF="http://www.maem.umr.edu/batch/"TARGET="_top">Shell Scripts on the PC</A> site has a set of comprehensive tutorials on the old-fashioned art of batch file programming. Certain of his ingenious techniques could conceivably have relevance for shell scripts.</P></DIV><H3CLASS="FOOTNOTES">Notes</H3><TABLEBORDER="0"CLASS="FOOTNOTES"WIDTH="100%"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="5%"><ANAME="FTN.AEN22409"HREF="dosbatch.html#AEN22409">[1]</A></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="95%"><P>Various readers have suggested modifications of the above batch file to prettify it and make it more compact and efficient. In the opinion of the <SPANCLASS="emphasis"><ICLASS="EMPHASIS">ABS Guide</I></SPAN> author, this is wasted effort. A Bash script can access a DOS filesystem, or even an NTFS partition (with the help of <AHREF="http://www.ntfs-3g.org"TARGET="_top">ntfs-3g</A>) to do batch or scripted operations.</P></TD></TR></TABLE><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="sample-bashrc.html"ACCESSKEY="P">Prev</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="index.html"ACCESSKEY="H">Home</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="exercises.html"ACCESSKEY="N">Next</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">A Sample <TTCLASS="FILENAME">.bashrc</TT> File</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"> </TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">Exercises</TD></TR></TABLE></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -