Linux脚本学习笔记

上一篇 / 下一篇  2006-09-30 21:57:07 / 天气: 晴朗 / 心情: 高兴 / 个人分类:Linux

 用Linux将近一年了,一直没有学习如何编写BASH脚本,准备十一看一下。今天稍微看了一下,做一下笔记。
,A?@*yUAk0天空博客 g9`*i$kg1~*Lz)tY5w
变量:
)Y!w%gBT"\0  用$+“变量名"表示。例:$name天空博客f5B:_|g)@(A1P
引号:
.}d&q!p1qu [0  ""双引号,双引号里面如果包含变量,不会求值,例如:echo "$name" 输出是$name
7F![6i#m;D K2K0  ''单引号,单引号里面如果包含变量会求值,例如:name="JanusLe" echo '$name'则输出JanusLe天空博客B1B}A p7np
  ``反引号,反引号内可包含命令,运行时候会先求反引号内的命令的结果,比如: cmd=`ls` 则可能输出a.c b.c(结果和运行ls命令一样)
R].\+~ er3jcQ0  \斜杠 ,有些字符可能是BASH的关键字,不能直接输出,要用的话加\。比如要输出句号可以这样\. 当然也可以用单引号或者双引号包含。也可以达到效果天空博客'y'W1h:s/xp#\b
天空博客8mGw{| mz ~
参数天空博客.Q Et[-C,@|Q}r
  脚本可以接受输入参数。类似于C,第一的参数是$1,依此类推。$#表示参数书目 , s*,s@可以存放所有参数
nY-Ym)p0 天空博客#@eB1v4e}
导出变量天空博客*~u+G;s2o"tv^
  如果有两个脚本a和b,b要用a中的变量,需要将a种的变量导出才可以用,具体方法是export 变量名
0A%u FUnq0
2JZ6eT Q3s;m+y0let 命令天空博客kVc2v*Z!w X `
 如果需要命令进行运算可以使用let 比如 let a=1+3 则a的值将为4
]'AeRjP0也可以用双括号达到相同效果((a=1+3))
mz+?'QD-P0
[_(G*n6[+[ q |'Xg0test 命令
vG1`D6K f~pm0  用于测试表达式,格式:天空博客g Y+j%Xx)?3WQ9Z*^&h
  test value -option value天空博客2~B fiW \'kl
  比如 test 3 -eq 4 //比较3是否等于4天空博客:x QrP"S3Ms3aS%I
  可以用两个方括号相同效果。[ 3 -eq 4 ]//括号左右一定要有空格天空博客~2D6Z!vtVz
天空博客0Za6fh2c
注:可以通过输出$?来判断上一句指令是否成功运行。0为成功运行,其他值为运行失败天空博客:H.X \l"M yB
天空博客/q6_Ws"Q+T)P
条件判断天空博客!A z V%nSW$I(P_
if 条件天空博客i6N&J%ErE yS~
then
"Q3p8unxSaB0命令
d!t er k,?6Pr0else天空博客3]*}UsC e RX
命令天空博客L"A-G%TDJ,]!CvG
elif  条件天空博客M.L8JZu%n$KiA!^
命令天空博客 SvjF|3O'd
fi
}\S)v3C*|*^@.KP0
^7U4BNU GJ:gP r \0case string in
ii R/yh#D-o7oS'W0pattern)
|,y;{0{e,Q3d0命令天空博客-b:N9fD:`-[ _'Q
;;
$} s:eX#b&pX0pattern)
*j yRw x0命令天空博客ar @Ap
;;
-kBR$Pm\a$d?0*)天空博客 ?0Q;v|2X2aM.\
默认命令;;天空博客)M8C0p"n6e Fw0bk
esac天空博客8B2`/vtj;l(V+o
天空博客ol7k"?i"y S.l
注:pattern可以用正则表达式
3} iZ tK3k0可以使用&&或者||进行与,或运算。天空博客 I4r e`6v2S

S2c I+P%o"|0
循环
?*| Y6y#k0while 条件
(E j{$rLu0do
7b{#h"_;]5p0command天空博客Nhs `]_ u\+L]
done天空博客/^8Ts,Q(HX#a`

*cS#jF l0until 条件 do
J)Qk"J ~O&Ju0command天空博客yv0Uh,lQ'dde@
done天空博客 JROj,cl
//条件不符合,循环天空博客6fCv!l)k {$WC
天空博客{7Q/i9MR;{nL2C
for var in lit-value
\9O7d.R&q5W_jN0do天空博客 b P)U#J5I^ S
command天空博客$AU(o?:k
done天空博客4Yty0A/y#Ww~(z
例:for var in *.c天空博客)cZ!gU(Cq2R
do
X/vxs(j0echo $var天空博客b7f,{ b7m
done天空博客5\]/i4C^$U
//显示所有c源码文件天空博客4Nv V6l@+K9Dd1H
天空博客Gw)K)CKcJ:j
for var
I FP0x4aku0do天空博客}"VZ$lC0J G-CG
command
C M]z1h0done
Wd:f4b j b0//这里var的值列表来在输入参数
+nd7v&k^+Bw/\0例:天空博客,i A"Y~|:F]Kp?X(Q
////////////天空博客l-s;YI["w#Mk
#!/bin/bash
5g9e0`;|,RhP4D q0#while.sh脚本
5em s y E#kg0L:KP0for var
(X)f/o;~a+jIb x0do天空博客'~K6og inH
echo $var
xz:r#EU'^M0done天空博客9a'o#l[.m'v!a2t
////////////天空博客;M0{ _ D3X@a
天空博客LA}1n{ b
$./while.sh a b c
b U,M1uE9b"w2I0a天空博客!}9@ \.^Tr
b天空博客QczV?H`&S
c
9tR:i!?'\nS0天空博客g"Kw9c9e/C
true false break continue
K8HJ \)j:MOk.K0天空博客snG H8yG

x1q Fp K/f9Z0在控制结构中使用重定向和管道天空博客$Ge T F/t*@o2x

']]aW;d?t0可以重定向控制结构的输入输出
-Q}|3VA0|x!`6Gl0
//重定向输出
&^yE G L3F0test="milk cookies apples cheese"
3e {t9LYxN*^0for i in $test
1Pxz6]^&T&Q0do天空博客 M]o1Hn
 echo $i
*{ l)bP&PNE$a0done > foods
$a/YI4_-C(b R@+x0天空博客G'I dA)K`Fh-P5L
//重定向输入天空博客B$G2m{f%D(q
while read i天空博客(|A,mpX.OF
do
'{ ~I d)}(sE%@0 echo i
:gG3rKW,?T2@0done < foods天空博客F ? f{7C3a{^
天空博客 |-E4y5i^ Oc]
天空博客`_Q@k
trap(捕获指令)
]N9Qu"i6|q0trap 命令 信号天空博客4X/gRn:` ~3Q
例:trap "echo GoodBye" 2 //捕获Ctrl + C
9K6SD,o+I:XCD0
K)H)G%I S_~Q.b0常用信号天空博客^\$B1?y*CM
0 程序终止天空博客%Ih\ L0~
1 挂断控制终端天空博客%qh5q$N+M3T"z"t&Q7L
2 按下Ctrl+C天空博客Z)u!@OB+G`3A
3 按下Ctrl+l
iW'{j;b&N09 杀死一个进程(这个不能trap)
:SuXC3IU!D3V015 利用kill命令终止程序天空博客VJ~SB3[`&jT[
24 按下Ctrl+Z(这个不能trap)天空博客([)D]|d }q8R

v4`.K h d.V)?0
/{9HOP&}6yK0(完)
l+B,X K3?0以后在陆续阅读一些脚本增加编写脚本能力。脚本编写这一课我算是补上了。
3`wn,U9o1s9d#f0
:b@Chr(?0PS:因为是写给自己看的,所以写的有些乱,呵呵。
+] tHR6@0

TAG: Linux linux

ypnekle的个人空间 引用 删除 ypnekle   /   2006-10-24 17:00:53
那个echo应该是双引号会求值,单引号不会求,你写反了。。。。。
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2009-07-05  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 14830
  • 日志数: 134
  • 图片数: 1
  • 建立时间: 2006-05-27
  • 更新时间: 2007-05-19

RSS订阅

Open Toolbar