如何在
Linux环境模拟DOS命令
4 b) l/ J$ M2 x& w6 R I
2006-06-01
( U" n! E+ `. B# U: F( H, B/ `6 e4 _7 g2 U/ E8 \! ?/ @
1 ?' n$ Q% K9 @
; ~/ _/ A5 X5 \& `+ d3 Y你可以利用Linux固有的command
shell的灵活性,创建
脚本语言,帮助你在Linux环境中模拟DOS命令。具体做法如下。
6 V/ W3 A3 }. N0 P- ?7 v2 S+ P7 h5 w; g( o4 d) L: M1 c
如果你是一位IT支持专家,你对于
Windows的命令操作非常喜欢,在你第一次使用Linux的命令行的时候,你可能很快就会发现自己被搞糊涂了。长期以来你所熟悉的DOS命令在Linux中不存在了。所以你会发现,自己面临着一项可怕的任务:重新学习并熟悉一整套新的命令。
+ }( u9 Y6 m9 g! f
0 K4 b |% S# ~$ p: s作为另一个选择,你可以利用Linuxcommandshell固有的灵活性,创建脚本,帮助你在Linux环境中模拟DOS命令。具体做法如下。
6 o$ T% S7 Z0 z; t' K% J F( S0 q7 d
shellscripting的基础
+ ?" |2 s: A/ \% I$ Q' c4 a+ |+ d
9 _0 l( G' d, K4 k* q* TLinux的shellscripting是一种自动完成多种
类型任务的方法,从夜间备份到简单的命令行应用。几乎任何
程序都可以通过shellscript完成。你甚至可以在脚本内部完成简单的条件检查。shellscript的基本格式如下:
6 \9 }& ?" s J/ n. I
- u& v8 X( x! r5 x3 @( k. g: l4 E#!/bin/sh
. I, p3 c. d& K2 L2 ~. W...
. i+ q" G- ~$ b9 s" t; t' o! g8 }
这里是你的命令
* |/ g1 t# x$ b! z% `" `
...
, H/ m1 H2 I+ ^. H5 ]* \; D
" o( S4 w. Y7 m/ }( e3 F r
注意文件是以#!/bin/sh开始的。这把操作
系统指向解释脚本的程序。绝大部分系统有/bing/sh,因为这是根用户使用的
标准shell。你可以在绝大部分系统中使用/bing/bash。
3 ^5 [1 o ?7 V5 a: w8 W7 U
' R1 z/ M+ n6 S' h
重要的是了解每个shell之间的脚本差别。一些壳,比如bash,比标准shell支持更多的命令。对于绝大部分Linux版本,sh事实上是bash。
, h( a6 d; `: @" Y* A/ t- q
: J- Z6 ^1 `( y& m$ E& d; K$ @从一个脚本运行命令非常简单。就好象在Windows系统中运行DOS。比如,你可以这样复制文件:
1 D. \/ e v5 d5 f0 g# K4 U+ l7 ?7 e! I- Q2 I1 Q f5 q* ?2 z
#!/bin/sh
" O* B4 g& w' r& S' z0 e5 Y* E
cpfile1file2
& e7 `# o) o- E: D% t) }mvfile2file3
6 J/ ?# M( w% A1 s7 q+ f8 v* ^echo"complete"%26gt;complete.txt
, H( Z2 F0 P `5 B2 n! X, D$ ~" x
2 b' w8 a% ^6 \' W+ x" c$ z4 ~能够不需要交互就完成一个命令对于自动运行的任务来说非常有用,但是对于用户来说却不是那么有帮助了。shell还为向一个运行中的脚本输入
数据提供了途径。这就允许脚本从用户那里获得
数据输入,然后在程序运行中运用这些
数据。命令行中的argument指的是$1到$9。如果你曾经在DOS中创建过批处理文件,你就可能对于使用类似的%1、%2处理同样的事情。下面是一个使用命令行argument的例子:
. l& m6 F$ _7 s
5 W$ s) ], U! _8 K S
#!/bin/sh
0 D1 S/ n3 K6 t% p* N6 Wcp$1$2
8 k. r) v: K7 l5 h: c8 I+ e* z* h) |- l" q+ U F
上面的脚本采用了两个命令行argument,并把其中一个作为拷贝的来源,而第二个作为拷贝的目的地。在运行上面这个脚本的时候,你需要输入诸如./myscriptfile1file2,这里的myscript指的是上面脚本的名称。命令行选项也可以通过这种方法传递,比如:
- X7 O* f" Q7 ^% P
: m# x5 y; u. ?5 x' ?. a
#!/bin/sh
3 \$ l! ]+ s- {; m
cp$1$2$3
. K" T2 x' O$ [& |; p8 {
( P/ l% w! F" K0 _" k3 q+ \5 Q0 U为了递归地把$2目录下所有的文件拷贝到$3,你可以使用上面的脚本:/copysourcedirdestdir。选项$1加上-r能够告诉系统进行递归式的文件拷贝。
% K5 I4 ~3 [8 V3 m. J
. w0 W: o# [+ |1 e: T0 c i带条件的Shellscripting
& G4 ~+ x$ n- Q/ O. a; A- [/ K l! G- Z j$ I( \( y
简单的Shellscripting对于处理直截了当、没有变数的任务非常合适。而对于那些需要一定程度决策的工作来说,if/then条件假设就成为必须的了。Shellscripting支持很多选项,从比较符操作到检索文件的存在。基本的if条件判断选项包括:
- p% F# N! q, |+ R8 e8 y2 V$ L
& N" [3 l, P6 j8 ?% f4 o9 r-eq检查某两个值是否相等(例如,if[2eq5])
7 x X5 j7 K9 h$ v2 z5 _1 T5 B6 E# o4 N) ?) O" _7 g
-ne检查两个值是否不相等
8 Z9 J# z3 r% Q5 m' t c
# \1 y9 R, r! B; Z: A9 ?& l6 H-lt检查值1是否小于值2
Y7 c# n6 S) d P' _8 A
7 j6 M: a( d7 o0 S3 b-le检查值1是否小于等于值2
9 Z3 {& X& v8 \/ F* V
( T! I- U, h1 M5 _8 W" }+ z-gt检查值1是否大于值2
) [. H2 h' S" J5 d( P3 U% Z8 X/ s# u! j' Y& V
-ge检查值1是否大于等于值2
, x/ ~& F' a- c( p; `/ P x
7 }1 c0 U3 P2 ?7 x/ ?-f检查某一个文件是否存在(例如,[-f"文件名"])
" F& W5 T d7 y
7 N) Z$ i) C. p9 X9 j/ ]& K-d检查某一个目录是否存在
+ z9 F" n0 d4 ]' T
: G; ?/ R2 K q7 g几乎所有主要的程序都可以使用比较操作。最经常使用的是-f,我们用它在使用某一个文件之前,先行检查它的存在。
9 l6 }0 ?7 T7 q
- \- d' V4 f+ ^! M H创建简单脚本模拟Windows命令
& {, O* c( Q/ Q6 u; A
2 F+ V1 t) K7 @: w! G) g3 U
现在,你了解了基础,你可以创建脚本命令,这样Windows用户就可以在Linux系统内使用同样的命令。为你常用的DOS命令创建模拟映射是非常简单的事情。例如,把Linuxcp命令映射为Windowscopy命令就是这样进行的:
k2 {+ X! E% M8 n
8 b; U* Q. r; g, q. \' w#!/bin/sh
, d0 P l3 L0 p l6 ^% ^if[-f"/usr/bin/mcopy"]
- Y9 i2 N, \ q1 h) w4 i
then
6 C5 ?. m2 c) T
mcopy$1$2
% U5 K2 Q* Y' s: P- {- Yelse
) C( ^& ]+ Q, V
cp$1$2
8 I9 F7 `2 a. X5 i* s
fi
& O0 G; [: g; G
8 B1 S$ O( p% D# q该脚本利用了mcopy(如果它存在),因为该命令接受Windows路径,比如:a:\file.txt。这个命令在绝大部分主流Linux版本的mtool包中。一旦一个脚本被成功创建,记得要使用chmod+xYourScriptName命令使它成为可执行文件。
3 a$ h3 H" e; k
; G/ ? R& @5 G& q* }% M0 x( g
有很多方法可以调试你的脚本,但是最简单的办法是在你的脚本中插入一个简单的echo语句。下面是一个例子:
7 E u# A! A& n
1 s7 y9 G, i' c#!/bin/sh
1 c5 R. y/ `- e. recho"marker1"
2 L4 K2 W" ~$ a1 Y( Z
if[-f"/usr/bin/mcopy"]
9 F d5 k- S# Y& N3 H6 P3 nthen
5 s* m$ E0 v" I# Hecho"marker2"
& P% u9 W# p$ Y) L
mcopy$1$2
5 a% d0 T& V6 | Y
else
5 c3 [9 o2 Y; ~echo"marker3"
" u1 l8 o# |5 s( Y4 I
cp$1$2
- }) ?' ]( `6 C
fi
5 A, t; b; ~6 t9 M5 Lecho"marker4"
* u3 D" v+ j, i& O& Y2 T( `+ n& C
使用简单的陈述帮助你了解这个脚本,并帮助你跟踪它是在那里出问题的。
( N6 n4 _ V& L; X' \! Q
9 [- i5 |; A* e( f4 D+ Z获得脚本
, Q- N, v% b! }5 o/ c
9 `; ~* L8 Q/ j' H8 h- N! j有了这些基本的脚本
知识,你就能够很容易地把绝大部分常用的Windows命令行转化成Linux可用的脚本。如果有某一个特定的命令行选项是你想进行映射的,查看Linuxmanpages,这能帮助你找到合适的方法。