Linux脚本学习笔记

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

 用Linux将近一年了,一直没有学习如何编写BASH脚本,准备十一看一下。今天稍微看了一下,做一下笔记。天空博客Q2CF8d(E n RaV

a\oZ jE$ND0^0变量:
&Ve5u*^d0F0Vm0  用$+“变量名"表示。例:$name天空博客UlIEv V#r&O
引号:天空博客L4H|vt#lT6I
  ""双引号,双引号里面如果包含变量,不会求值,例如:echo "$name" 输出是$name
q2[3hpw-j d#F0  ''单引号,单引号里面如果包含变量会求值,例如:name="JanusLe" echo '$name'则输出JanusLe
Oc2eAy-e1[!G-c'h0  ``反引号,反引号内可包含命令,运行时候会先求反引号内的命令的结果,比如: cmd=`ls` 则可能输出a.c b.c(结果和运行ls命令一样)
8U6B0B,K ~D$Hx0  \斜杠 ,有些字符可能是BASH的关键字,不能直接输出,要用的话加\。比如要输出句号可以这样\. 当然也可以用单引号或者双引号包含。也可以达到效果
!pbd@%e9~ w0天空博客YO jA;R\0`|m
参数天空博客4z/?Fi%O+N
  脚本可以接受输入参数。类似于C,第一的参数是$1,依此类推。$#表示参数书目 , s*,s@可以存放所有参数
"y.y {`%ew]y2u0 
,I8WKp:m\%c1NJ4n*m0导出变量天空博客Y u Y"`pp'M*v~
  如果有两个脚本a和b,b要用a中的变量,需要将a种的变量导出才可以用,具体方法是export 变量名天空博客%K0Op3t4R6]

0E:g.tT y/?cwV0let 命令天空博客9D}y^D(w2B
 如果需要命令进行运算可以使用let 比如 let a=1+3 则a的值将为4天空博客!irN\o%j;g
也可以用双括号达到相同效果((a=1+3))
:raWADk0
c^H/F9@0u \SZu0test 命令
i~(rAsv4ki~"e0  用于测试表达式,格式:
B|"j t&]|l2f0  test value -option value天空博客tJA9vU.u
  比如 test 3 -eq 4 //比较3是否等于4天空博客cV B!wIYL
  可以用两个方括号相同效果。[ 3 -eq 4 ]//括号左右一定要有空格
e Ya%Cy P+b4Alz0天空博客%O:w2B~:ny^ ?
注:可以通过输出$?来判断上一句指令是否成功运行。0为成功运行,其他值为运行失败天空博客 |0T#sY"F[.e0n6F#b
天空博客1h Q1C c `2x2[
条件判断天空博客SYoNA0z4m
if 条件天空博客 N^$S[9PO Lr
then
{KKx"y@ke0命令
2ZwL I$?5{(AbE0else天空博客8KW5cul T Ob[ o
命令
E \e1e-QrB'_0elif  条件
`uU$_1lHh0命令
Eb [%r6| o~0fi
6G|^ S$vyu0天空博客J-{P&j|Q.l.u
case string in
e"n$Y8q4n0pattern)天空博客2bK3o#qiG
命令天空博客Jq4@:Zs9Z JJx-y
;;天空博客O1aS6^/^&v:bHhu
pattern)天空博客)eS)j)oE)Y7z
命令
9G:e/ZH*@1Z0;;
/j.pN1Y4loP0pQd0*)天空博客YC9Y ~2ub {0d2R_
默认命令;;
#kZb&c&`+J!t0esac天空博客 r?Lc Fm

7N/]4M^ yd_h0注:pattern可以用正则表达式
8h~*ewXg0可以使用&&或者||进行与,或运算。天空博客w An$wyB)k

/JbVJI*O2v;F0
循环
{u*T2w&KcRJ,J-ad0while 条件
r-l2dG {4pg ra/h0do天空博客K|1?~hn I,{Uo
command天空博客 CI d#G9dY ~V,Q
done天空博客nsh1^5@+H
天空博客P0R+\aY^P
until 条件 do天空博客IB Y3jI
command
gSF_ r0done
7d%Xv'q{+ON7b@0//条件不符合,循环
9t+EN)x:k,Owv.T0天空博客+W7sc*Y!q3HZ
for var in lit-value
?"] Lc oo p%|0do天空博客pD M2G4SL+J
command
"i f)ARW.l4Bk0done天空博客spn1C3A
例:for var in *.c
#[2@q3X1\0do
R;F-o\7jg t9x:E0echo $var
M:Q]9V1^0done天空博客+vV4CFA y
//显示所有c源码文件天空博客dMgW4M

:Vm7wV6GS]W0for var
Yv a7A t j%fB B%J0do天空博客 w:V/}U/mWg
command天空博客 D'? h|,pw$N
done
y-v\&t-TL0I C:_#?8}0//这里var的值列表来在输入参数
Y|q+S`(V0例:天空博客*k(I5zC.U!u#f
////////////
#X] _?1t[$l,L0#!/bin/bash
IEG']6O0#while.sh脚本天空博客%Z5_/z!x(t&s6j2GX
for var天空博客;^5o,j(WG4H t
do
7q/[TMM#S O@0echo $var天空博客t#ol\;f
done
ZM2e'L7}iutK8z0////////////天空博客F3Yt;PqYbG
天空博客,Q(CCY8f}C
$./while.sh a b c
tUPrNV0a天空博客\n W1['tOv
b
!e Qa |b A,O0c
^ rjl'y(RV c7k2L0天空博客%[:?s F nb
true false break continue
3Od^_}&Ic'_u C+L0
{N^De |_0
@pxz2L&T {'t1_a0在控制结构中使用重定向和管道天空博客.v/]WM(t%W

7e Pz2r+h7S0可以重定向控制结构的输入输出天空博客LP%M9~ U U1L}
//重定向输出天空博客/jEW*Pva
test="milk cookies apples cheese"天空博客(Y/?:a$BMs2s^*`Uy!_
for i in $test
kYUj'OY0do天空博客U`$zk kkQA;^
 echo $i天空博客"Mg.r+ww$Fh!VhN
done > foods天空博客$L }t,h3@

Y|:@%F5s/I s7XWr0//重定向输入天空博客A){(A4k%Cg^Vf0g
while read i天空博客1C_:ECf"cg I^
do天空博客+?/xOz'@,` s l
 echo i
2i7i4c$J%HFJ0done < foods天空博客jb+_;n6m$O?6Z X
天空博客o[ @ dotQ*a:}
天空博客7^{J]^&R
trap(捕获指令)
o;Th5@Z E:Oi(_$ar0trap 命令 信号天空博客!D)apl"DU*jF.D
例:trap "echo GoodBye" 2 //捕获Ctrl + C
})X$vm l2c0天空博客XMk/aoz{
常用信号天空博客+B-F!ZL+m
0 程序终止
m5V.c(^Ww*r:j;a01 挂断控制终端
|/Ak'z*tz02 按下Ctrl+C天空博客7Tq r y#C'o6WO
3 按下Ctrl+l
:E,p5tPIZj09 杀死一个进程(这个不能trap)天空博客"p%UB Oe
15 利用kill命令终止程序天空博客*y ob&v*od h
24 按下Ctrl+Z(这个不能trap)
8O4~kUTA0
]Ct&G'o0天空博客 F1w||z%]"ka\+Vx
(完)
/_ hdU.n0以后在陆续阅读一些脚本增加编写脚本能力。脚本编写这一课我算是补上了。
'AI%Y4mw0天空博客%Ez(h'`F c g7f(y
PS:因为是写给自己看的,所以写的有些乱,呵呵。天空博客4} Wkl3w*x.@k+A

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 :( :)

日历

« 2010-03-15  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

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

RSS订阅

Open Toolbar