shell入门基础必备

上一篇 / 下一篇  2008-11-30 21:34:31 / 个人分类:Shell 编程

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP
51Testing软件测试网B]F'U.MW(e

1.建立和运行shell程序51Testing软件测试网eEAB8ziEo
  什么是shell程序呢? 简单的说shell程序就是一个包含若干行shell或者linux命令的文件.象编写高级语言的程序一样,编写一个shell程序需要一个文本编辑器.如VI等.在文本编辑环境下,依据shell的语法规则,输入一些shell/linux命令行,形成一个完整的程序文件.51Testing软件测试网(u'xq8PKw
  执行shell程序文件有三种方法
8~'T/U;O*`e0  (1)#chmod +x file(在/etc/profile中,加入export PATH=${PATH}:~/yourpath,就可以在命令行下直接运行,像执行普通命令一样)51Testing软件测试网 rdv1N0F
  (2)#sh file
~M:l#c'o4~i\P0  (3)# . file51Testing软件测试网 CIaP+A|U.P0l
  (4)#source file
:o8oZnrG}Tx0在编写shell时,第一行一定要指明系统需要那种shell解释你的shell程序,如:#! /bin/bash,
H3K Q,y0s9XA~D$Ky0#! /bin/csh,/bin/tcsh,还是#! /bin/pdksh .51Testing软件测试网BZ|2Y7T*gg
2.shell中的变量51Testing软件测试网 nC;];~.v'~(x0U%@qI7K O
  (1)常用系统变量51Testing软件测试网i? K3Z9At/FPu
     $ #        :保存程序命令行参数的数目51Testing软件测试网 m^8aQ A M
     $ ?        :保存前一个命令的返回码
x6e^&h"F0     $ 0        :保存程序名51Testing软件测试网vDRk.X;~9o"X
     $ *        :以("$1 $2...")的形式保存所有输入的命令行参数51Testing软件测试网9Y7` k"LS'y%vc-P
     $ @        :以("$1""$2"...)的形式保存所有输入的命令行参数51Testing软件测试网qvb,`)|p3R

51Testing软件测试网?8Qt3f.qCb1k T

其他系统变量:51Testing软件测试网 A:Tb-o"H R,d
有些系统变量可以赋予新值:51Testing软件测试网*a/c:[5B&A,R
$HOME 用户自己的目录。51Testing软件测试网_4Y&dD/W*Yx3?'v,y7?
$ PATH 执行命令时所搜寻的目录。
u5R"{7SJHg0$TZ 时区。
-u cO k+M;k!H.@0$MAILCHECK 每隔多少秒检查是否有新的邮件。
9[5`T$JjmVH0$PS1 在Shell命令行的提示符。51Testing软件测试网%m _.b$WG.Q^K^ K(?
$PS2 当命令尚未打完时,Shell要求再输入时的提示符。51Testing软件测试网+T9P5e oX%WU
$MANPATHman 指令的搜寻路径。
r.MhrX/F"YI%s0有些变量在执行Shell程序时系统就设置好了,并且不能加以修改:51Testing软件测试网;lL4Ys{M*jk
$# 存储Shell程序中命令行参数的个数。
TI&vR3j!J0$? 存储上一个执行命令的返回值。51Testing软件测试网u;Z6c^2O9z%tQ
$0 存储Shell程序的程序名。
)s DO/R/lC4w^F0$* 存储Shell程序的所有参数。
4t(j)[v_QcN*^0$@ 存储所有命令行输入的参数,分别表示为“$ 1”,“$ 2” . . . 。
K9q N |OA-V^0$$ 存储Shell程序的PID。51Testing软件测试网&_#[{c%A0U{m`
$! 存储上一个后台执行命令的PID51Testing软件测试网!d5cV'{ ATvu
  (2)定义变量
*o3M \k Yk8N$x7o k0   shell语言是非类型的解释型语言,不象用C++/JAVA语言编程时需要事先声明变量.给一个变量赋值,实际上就是定义了变量.
b'u S2ql0   在linux支持的所有shell中,都可以用赋值符号(=)为变量赋值.
&cfdK7?0p+e(ZXs0如:51Testing软件测试网;N#KI9t1N)o
  abc=9  (bash/pdksh不能在等号两侧留下空格 )51Testing软件测试网*_V&EjcD
  set abc = 9 (tcsh/csh)51Testing软件测试网C_6x? L"i6k
   由于shell程序的变量是无类型的,所以用户可以使用同一个变量时而存放字符时而存放整数.51Testing软件测试网9V8_a Scb#^
如:51Testing软件测试网9B&ZV2U9yj#uZ
  name=abc  (bash/pdksh)
,m%^exz8u(P-D0  set name = abc (tcsh)
8tVU |%L-D+i8vK2R0  在变量赋值之后,只需在变量前面加一个$去引用.51Testing软件测试网d2wR/H}2b?
如:51Testing软件测试网2z:?n%D7uBfw
  echo $abc51Testing软件测试网3A-Uh1k!]-[t
  (3)位置变量51Testing软件测试网"n&XgHLs
  当运行一个支持多个命令行参数的shell程序时,这些变量的值将分别存放在位置变量里.其中第一个参数存放在位置变量1,第二个参数存放在位置变量2,依次类推...,shell保留这些变量,不允许用户以令外的方式定义他们.同别的变量,用$符号引用他们.

0j f9@ SQ#Z051Testing软件测试网(h1W4d6a A ~

3.shell中引号的使用方法
aAvKD0  shell使用引号(单引号/双引号)和反斜线("\")用于向shell解释器屏蔽一些特殊字符.反引号(")对shell则有特殊意义.51Testing软件测试网av1X;T%aZ i%[
如:
M^;dI?0 abc="how are you"  (bash/pdksh)
t6Ol])U4Ngo9F&P0  set abc = "how are you"  (tcsh)51Testing软件测试网}&@y+F aC{7b.wbQ
这个命令行把三个单词组成的字符串how are you作为一个整体赋值给变量abc.51Testing软件测试网M(\R.d @ v,V
 abc1='@LOGNAME,howare you!' (bash/pdksh)51Testing软件测试网{}q(`TT!?
  set abc1='$LOGNAME,how are you!' (tcsh)
*j:p:~V]8@"r{!U0  abc2="$LOGNAME,how are you!" (bash/pdksh)
-W.x5B)U4k#ao0  set abc2="$LOGNAME,how are you!" (tcsh)
*F:I+V3y`\3\0LOGNAME变量是保存当前用户名的shell变量,假设他的当前值是:wang.执行完两条命令后,abc1的内容是:$LOGNAME, how are you!.而abc2的内容是;wang, how are you!.象单引号一样,反斜线也能屏蔽所有特殊字符.但是他一次只能屏蔽一个字符.而不能屏蔽一组字符.反引号的功能不同于以上的三种符号.他不具有屏蔽特殊字符的功能.但是可以通过他将一个命令的运行结果传递给另外一个命令.51Testing软件测试网5^+R1^aiYg/D
如:
(BH;|#G:h9raSW0  contents=`ls` (bash/pdksh)
v9^7yht Y#I0  set contents = `ls` (tcsh)

yqq-B+h"u)s^051Testing软件测试网fK$[U Y aRQ#c

在Shell编程中,要区分不同的引号。单引号(‘ ’)、双引号(“”)和51Testing软件测试网E bl;lf+v dg-Pt
反斜杠(\)都用作转义。
UY5zG DCqlu0(1)这三者之中,双引号的功能最弱。当把字符串用双引号括起来时,Shell将忽略字符串51Testing软件测试网*ZD!]7v3p d5N;{F^
中的空格,但其他的字符都将继续起作用。双引号在将多于一个单词的字符串赋给一个
B3M1Ra/S&u c0变量时尤其有用。例如,把字符串hello there赋给变量greeting时,应当使用下面的命令:
xAY.x:i0greeting="hello there" (在bash 和pdksh环境下)
6e_TX,J3AE2f5O0set greeting = "hello there" (在tcsh环境下)51Testing软件测试网7Fe$D4K1p'Ga S3B
这两个命令将hello there作为一个单词存储在greeting变量中。如果没有双引号,bash和51Testing软件测试网a&qq,me&n{l.O#g
pdksh将产生语法错,而tcsh则将hello赋给变量greeting 。
2G$YE:B*J0(2)单引号的功能则最强。当你把字符串用单引号括起来时,Shell将忽视所有单引号中的特51Testing软件测试网e:]z8S%B5{
殊字符。例如,如果你想把登录时的用户名也包括在greeting变量中,应该使用下面的命51Testing软件测试网0U7A]R P9?4P
令:
eU`6ad4b7B,UkH5JFLv0greeting="hello there $LOGNAME" (在bash 和pdksh环境下)51Testing软件测试网8WJ ez.f$k
set greeting="hello there $LOGNAME" (在tcsh环境下)51Testing软件测试网-ek'g s]7XPI
这将会把hello there root存储在变量greeting 中,如果你是以root 身份登录的话。但如果你51Testing软件测试网:G/RX5X0[T(?
在上面使用单引号,则单引号将会忽略$符号的真正作用,而把字符串hello there $LOGNAME
r7ad1S;PR X&mS0存储在greeting 变量中。51Testing软件测试网 m+mD#HO)Q*{(v"o;l](p
(3)使用反斜杠是第三种使特殊字符发生转义的方法。反斜杠的功能和单引号一样,只是反
"Q Ai2A;N+hhw0斜杠每次只能使一个字符发生转义,而不是使整个字符串发生转义。请看下面的例子:51Testing软件测试网P u(F'TFV
greeting=hello\ there (在bash和pdksh环境下)51Testing软件测试网HF.cmQ2Z @+F"B
set greeting=hello\ there (在tcsh环境下)
[@n"Y'q r)B7M0在命令中,反斜杠使Shell忽略空格,从而将hello there作为一个单词赋予变量greeting。51Testing软件测试网,KFS ~ E[M:?
当你想要将一个特殊的字符包含在一个字符串中时,反斜杠就会特别地有用。例如,你想
"d4Ji_uS0把一盒磁盘的价格$26.00赋予变量disk_price,则使用如下的命令:51Testing软件测试网Q%mlp9v+N)}xIC
disk_price = \$26.00 (在bash 和pdksh环境下)
j#T7Ntlo S\{0set disk_price = \$26.00 (在tcsh环境下)51Testing软件测试网#rh!Hn9P%p2SX_

9D6| og&F9C"w5t0
&xd|w O.\04.shell程序中的test命令
7n&d:Gx(| m+O0  在bash/pdksh中,命令test用于计算一个条件表达式的值.他们经常在条件语句和循环语句中被用来判断某些条件是否满足.
8f"out)C xf}a0test命令的语法格式:51Testing软件测试网9K.Zx.[BE!w'L/s
  test expression
5g5gt$b#i0  或者51Testing软件测试网7J._m%Y/[3ZXVp
  [expression]51Testing软件测试网 l-H8fc*P~ }T.n5H

51Testing软件测试网~ xb$gt

在test命令中,可以使用很多shell的内部操作符.这些操作符介绍如下:51Testing软件测试网2i/@k y*]Lo Rb
(1)字符串操作符  用于计算字符串表达式
&l9h0zch'wJ,K0  test命令    |    含义
:ZU R]Gd,kqYq0  -----------------------------------------
$[ g'{6DcJ\0  Str1 = str2 | 当str1与str2相同时,返回True51Testing软件测试网_6W0z"C4xZ
  Str1! = str2| 当str1与str2不同时,返回True
1K2]-[(t,E.L)~/v6dX0     Str      | 当str不是空字符时,返回True51Testing软件测试网:x,U1cd:i#H
    -n str    | 当str的长度大于0时,返回True
M5H4B` P E0    -z str    | 当str的长度是0时,返回True
%h;t+ZQ;h#c N7t8}0  -----------------------------------------
a-~"Ov3Y#w ~7[0  (2)整数操作符具有和字符操作符类似的功能.只是他们的操作是针对整数
ix9l;\/F9O3_0  test表达式   |    含义51Testing软件测试网 uipi,?'\B k8R
  ---------------------------------------------51Testing软件测试网[2o&x h.F"I!slm
  Int1 -eq int2|当int1等于int2时,返回True51Testing软件测试网$J%w x ob
  Int1 -ge int2|当int1大于/等于int2时,返回True
In [6X M9kA%kA/^9g8ky,_0  Int1 -le int2|当int1小于/等于int2时,返回True
6C\"c(s VK,a0  Int1 -gt int2|当int1大于int2时,返回True
{ ] N](tZ!L/^k1]3a0  Int1 -ne int2|当int1不等于int2时,返回True51Testing软件测试网l+i~_"wm*K8vuq;y
  -----------------------------------------51Testing软件测试网7v(Y;`Gko(o
  (3)用于文件操作的操作符,他们能检查:文件是否存在,文件类型等51Testing软件测试网j-k;_5Pz.g]
  test表达式   |    含义
3\0\1~ G(Dmh&h`C0  ------------------------------------------------
!l/D._;A+Oa {0  -d file      |当file是一个目录时,返回 True
!?7y1LQ-HIrM8TP0  -f file      |当file是一个普通文件时,返回 True51Testing软件测试网.iAF`~I4yL u
  -r file      |当file是一个刻读文件时,返回 True
pI1[a tU$s]/P0  -s file      |当file文件长度大于0时,返回 True
\y/S z9uQ0  -w file      |当file是一个可写文件时,返回 True
har:i!C~0  -x file      |当file是一个可执行文件时,返回 True51Testing软件测试网mL!v|)XG
  ------------------------------------------------51Testing软件测试网d MxhH5}k$R
 (4)shell的逻辑操作符用于修饰/连接包含整数,字符串,文件操作符的表达式
$juZ7d1Ae)EV4I2w0  test表达式    |    含义51Testing软件测试网(x-]x} nCOj$S)S
  ----------------------------------------------------------
%e9Z uFK8B*m m3A0  ! expr        |当expr的值是False时,返回True51Testing软件测试网4pO0l!m Ib'i7E"B OHK
  Expr1 -a expr2|当expr1,expr2值同为True时,返回True51Testing软件测试网9n3U2{u,t X
  Expr1 -o expr2|当expr1,expr2的值至少有一个为True时,返回True51Testing软件测试网Fk"RX5k1s tZ-}q;D
  -----------------------------------------------------------51Testing软件测试网 M6b/F8kU-A#w7]
注意:
U6up9{$?v:cxi A0tcsh shell 不使用test命令,但是tcsh中的表达式同样能承担相同的功能.tcsh
G MhQWP.IG8C+@0支持的表达式于C中的表达式相同.通常使用在if和while命令中.
5u5i,E#z%x(xP!Y0  tcsh表达式    |    含义51Testing软件测试网2}7Se5_V-C$PE8L
  -------------------------------------------------------
9Jn0M5m\%L dV0  Int1 <= int2  |当int1小于/等于int2时,返回True
9] ^enOXI| v0  Int1 >= int2  |当int1大于/等于int2时,返回True
#l:SqS2E0  Int1 < int2   |当int1小于int2时,返回True
]dFh8md r!p$M0  Int1 > int2   |当int1大于int2时,返回True51Testing软件测试网&X0F8]sV0lH
  Str1 == str2  |当str1与str2相同时,返回True51Testing软件测试网 Uy K,L-N4f.q
  Str1 != str2  |当str1与str2不同时,返回True
/B;WH8@.h+b0  -r file       |当file是一个可读文件时,返回True51Testing软件测试网hI)Sp%Sn
  -w file       |当file是一个可写文件时,返回True
1[7R)U4QV"W"s$b0  -x file       |当file是一个可执行文件时,返回True
R[S$X ]@ _.Z:E0  -e file       |当file存在时,返回True
vp'P8m'rm0  -o file       |当file文件的所有者是当前用户时,返回True
yV/G4P2xc?6o-P0  -z file       |当file长度为0时,返回True51Testing软件测试网dk [5]"E{ i
  -f file       |当file是一个普通文件时,返回True51Testing软件测试网;z7^,mO G%}C;w4fL b
  -d file       |当file是一个目录时,返回True51Testing软件测试网} f7b cN sa4pG
  Exp1 || exp2  |当exp1和exp2的值至少一个为True时,返回True
uAKVZS }"e0g.k6R0  Exp1 && exp2  |当exp1和exp2的值同为True时,返回True
N#K[m,Rm0  ! exp         |当exp的值为False时,返回True
6J.e WJ8zE m0  ------------------------------------------------------51Testing软件测试网}}SA"x

TAG:

 

评分:0

我来说两句

Open Toolbar