如果你是
习惯于
Windows命令提示符的IT人,当你第一次使用
Linux命令行时,一定会感到无所适从。你所熟悉的DOS命令再
Linux中基本不存在。摆在你面前的是一大堆要记背的命令。
: P; K. {& G. }" @' E
8 A; s0 M7 ~" ^) F% q一种替代
方案是利用强大的Linux外壳命令编写
shell脚本,让你在Linux下也能用DOS命令。下面告诉你怎么做。
; ^, v" F- O- R- L
+ ^& B7 a) m2 p' d8 g3 B
shell脚本编写基础
/ O$ s$ |( V' C3 {8 F从定时备份到执行简单命令,Linux的shell脚本可以执行各种
功能。几乎所有的
程序都可以用shell脚本来运行。在脚本中甚至可以包含一些简单的条件选择。shell脚本的基本格式如下:
9 A' a& E) L, f, s+ e" Y
- a# |8 H8 {- v( h: A#!/bin/sh
* Q- ?( [+ |) \7 U2 Q
9 j; b0 f' s% O...
" Z% a; s- Q% u K; Y. h" N! U5 z6 w6 {% n2 ~0 n: T
Yourcommandshere
4 g: c* s: r( D0 `; q4 l1 L. y# l; ^# ?& d% @8 k+ Q
...
$ V b/ X+ |" B' V
0 e* c* C; ~- T
注意文件以#!/bin/sh开始。这条语句告诉操作
系统用来解释脚本的程序位置。大多数系统会有/bin/sh目录,因为该目录包含root用户的
标准shell程序。在大部分系统中你也可以指定/bin/bash目录。
; o6 m5 f: N% w9 S+ V% o* l3 f
$ d6 j& f8 }5 I5 t每种shell的脚本都有所不同。一些shell,比如bash,支持比标准shell更多的命令。在大多数Linux版本中sh实际上就是bash。
# X8 _, k" C: q+ Z, w8 R; K& x. V
+ q. F L3 ]0 z* g从脚本运行命令十分简单,很像在WindowsDOS提示符下运行命令。举个例子,通过下面这段语句可以拷贝文件:
1 l$ I: h& F; Z8 N @* h, D$ g* A
& [$ G0 x" p$ Q5 C' [" l+ m#!/bin/sh
) C2 {: S# Z7 I( b3 I& P( C
. W( G! t% R6 i) X/ Wcpfile1file2
' p# F+ T- L/ y o! T
* [0 c9 i+ j1 W- K; e [ z
mvfile2file3
) L" U: Q4 o P+ ^/ N0 i: s) C3 t+ L
echo"complete"%26gt;complete.txt
( Q1 U4 m5 }$ Z8 @* c: ? G% L
" N# m5 U; \) ~+ I6 X% T @! k) C
自动执行命令对那些不需人工干预的任务很有用,但对一般用户来说并不那么有用。为此,shell脚本在执行过程中允许用户输入命令行参数,然后利用输入的参数运行命令。脚本中输入参数用$1到$9表示。如果你曾写过DOS批处理文件,你会发现批处理文件中也有
类似功能,只是它用的是%1、%2等来代表输入参数。下面举例来说怎样使用命令行参数:
' m7 ]4 d/ K+ D4 J% a$ `
4 }% L1 o( I# Q7 m# ?6 z6 e
$ ^0 K$ E& {9 r P
- p* l$ e: L0 W* h5 p c" @& U
#!/bin/sh
8 V$ S9 h# K' s( {$ v0 U X4 E3 s- T9 E; \6 J- p. n- |/ E
cp$1$2
7 p# {" W" f! s1 y/ j7 M% e9 s) h9 I0 J5 C- Q6 r
上段脚本接受2个命令行参数,第一个是要拷贝的原文件,第二个是拷贝的目标文件。运行脚本的命令格式是:./myscriptfile1file2,myscript代表脚本文件名。命令行选项也可以通过这种方式传递,如:
6 y b0 P* [, U, Q% {$ D6 v* j; j
#!/bin/sh
' M# q( r6 D/ }0 l& {: d
\, M$ T. [. e3 \1 S$ ccp$1$2$3
: }8 T( g4 Q7 g2 q* E( R# j8 g
8 ?3 ~3 W; e% ?" M2 E E
键入./copy–rsourcedirdestdir形式的命令执行上段脚本,即可递归拷贝$2目录下所有文件到$3目录下。选项$1为-r时能让cp命令递归拷贝所有文件。
1 r/ g& H, `1 A& G8 q
) ?) m: g! J' @1 g2 D. K含条件选择的shell脚本
/ y3 H* e( }) ~ Z. Y
对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本
编程支持此类运算,包括比较运算、判断文件是否存在等。基本的if条件命令选项有:
2 w1 E" \+ q" {% k: H6 f; W6 H) Z
6 T' y8 h7 o( z/ h1 q2 Y X-eq—比较两个参数是否相等(例如,if[2–eq5])
2 s% l! P* C* j: |
-ne—比较两个参数是否不相等
7 \- l/ W; R6 F- g5 y' Z `( k-lt—参数1是否小于参数2
; [0 |' S6 ]+ M% k3 j-le—参数1是否小于等于参数2
# e4 S# s. \* Q1 X& S, I4 z-gt—参数1是否大于参数2
3 p7 T- D* V- y0 P3 w. a, o-ge—参数1是否大于等于参数2
& w: o2 O0 A4 G# S& Q( W
-f—检查某文件是否存在(例如,if[-f"filename"])
6 u: F6 j, G& R( C. A" B-d—检查目录是否存在
" ]) |4 d5 n% T6 q
几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。