Linux脚本学习笔记

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

 用Linux将近一年了,一直没有学习如何编写BASH脚本,准备十一看一下。今天稍微看了一下,做一下笔记。天空博客!B{#{(U3^3W6} i:S\

0d+fY"_3E%GLN0变量:
o.uz6~)N ^d0  用$+“变量名"表示。例:$name天空博客-v1_F+UF+t)K
引号:天空博客&b|;?~f] rD
  ""双引号,双引号里面如果包含变量,不会求值,例如:echo "$name" 输出是$name天空博客S%em ?RS
  ''单引号,单引号里面如果包含变量会求值,例如:name="JanusLe" echo '$name'则输出JanusLe天空博客.Nn)A2}-@G9y5g F
  ``反引号,反引号内可包含命令,运行时候会先求反引号内的命令的结果,比如: cmd=`ls` 则可能输出a.c b.c(结果和运行ls命令一样)天空博客-j#M"IR-rF
  \斜杠 ,有些字符可能是BASH的关键字,不能直接输出,要用的话加\。比如要输出句号可以这样\. 当然也可以用单引号或者双引号包含。也可以达到效果
&{qXV}0
Qc5w$?#}s5n0参数
[ _h"FF;Xp2U0  脚本可以接受输入参数。类似于C,第一的参数是$1,依此类推。$#表示参数书目 , s*,s@可以存放所有参数天空博客nr%o3z&w+Ay
 天空博客 Dv Pca%\H
导出变量
m Sfe1L_a5|0  如果有两个脚本a和b,b要用a中的变量,需要将a种的变量导出才可以用,具体方法是export 变量名天空博客?2NY oM!Zk0u |!FEy
天空博客*yE J@Q"t} |
let 命令天空博客(E v|6z$T;p3K
 如果需要命令进行运算可以使用let 比如 let a=1+3 则a的值将为4
2]1r!G#u.M+e^0也可以用双括号达到相同效果((a=1+3))天空博客H0E9q3[YE,P

_n#wuD1l#O/H0test 命令
Z1gm [6|rO0_2wo0  用于测试表达式,格式:
6Ei'[r/D0  test value -option value
Os7o&|e Q0  比如 test 3 -eq 4 //比较3是否等于4
s [ W QB4T0w0F X8j0  可以用两个方括号相同效果。[ 3 -eq 4 ]//括号左右一定要有空格天空博客HW3\ Tyy${

V} h/[}w|0注:可以通过输出$?来判断上一句指令是否成功运行。0为成功运行,其他值为运行失败天空博客1[s+t!TuI5o!TYr4~RI#E

H+|F:|^cY8up1s0条件判断
4mhaZBW:~0if 条件天空博客:@5I4}8p:P&Uf
then
qz6E'q `q Mo N0命令
UL)iz F'e K7_K5d0else
HdY;\)~WQ0命令
)k+h;uQ%MzDf0elif  条件
JU5a OdQ&Y V0命令天空博客"{X:HE _ P
fi天空博客*@G6|6_6F%Q&x^

`#c{:z}2k!x0case string in
,ZRk3].x*u[0pattern)天空博客 V M1x{ ?S;Jd
命令天空博客b PfI)\Dd
;;
6Wj)n iI"rO1JPi;K0pattern)天空博客iVp!o7\i C
命令
|$|{5]:ZE\{0;;
xQk#g1s%gq o\0*)天空博客$\6m)yN-EF#HM H
默认命令;;
N } uJ2MdB)g0esac天空博客 K:_7f3H*|

v?yrI1p5J0注:pattern可以用正则表达式天空博客mf5vMz#bL2`
可以使用&&或者||进行与,或运算。天空博客 _0M?*wa+q,c
天空博客!`)t KW.?
循环天空博客h7Z0?,QJ-F s4X
while 条件
|@Rd8c3j4C*G+f-T` L0do
{:n.l/n'MQ$o W0command天空博客~-HG:KsT`a
done
*B:W?8kt^0天空博客j&tt5t}4}L
until 条件 do天空博客W6P6x*R8[6nzn J
command
$|f5UO!I0done
"v;X,D`GC0//条件不符合,循环
/{P7o IRD0
#Z2~v y2{ VG%`H-q#Ge6l0for var in lit-value
| aw w"d&Z#l%u0do天空博客,]'tW,o ?
command
+H,e,E q#h}-|/Q!]0done
a6b8KP'{ q(y!g0例:for var in *.c天空博客E0P j2F)|,y Y)n"l
do天空博客J1LIx6R1Xk
echo $var天空博客x]"{ Y3s$wQ%jD1l ?
done
l&F2g#m!Rcew0//显示所有c源码文件
j MM [KNj0
5m [2K sHeM7N0for var天空博客c)P{h;SjA
do天空博客a%T Cw&j&cc)H
command
9M*mH7x f A1T3C8a0Q0ue0done天空博客!Z#t,t3Y ]"fdQ
//这里var的值列表来在输入参数
T+]wJa4q0例:
{J-N-R(y0////////////天空博客hec B t1q Z1h
#!/bin/bash天空博客&n6bj,[c?
#while.sh脚本天空博客Y2BwV7s"C"B U*tc
for var天空博客b(@3V*l8T K4hs
do
dR#ci2rl0C8X0echo $var天空博客k,? uDb%{-k
done
1lQR5vP(Ea~0////////////
J~Lt!YJNb1qy0
[4T5z1t{Z7u2^!d8HT0$./while.sh a b c天空博客:bL ~8L k.b
a天空博客Ne9kXG iM
b天空博客$QD0l1t#_ s
c
_$CZ.dcq.v@0天空博客B J"b8}.^L
true false break continue天空博客*JMF-klem
天空博客GIf%{(gD4|

8[K'u)JHb)r$y0在控制结构中使用重定向和管道天空博客 PMqC(Rv9U
天空博客Ji8b'~}
可以重定向控制结构的输入输出
\/L/RN.qCN4l l0
//重定向输出天空博客T["QKwI%~#X6tL
test="milk cookies apples cheese"
}%mbq;Yq3^0for i in $test天空博客2A)K1Z(u'[VK
do
(v#~wG X7[1q:y^ a0 echo $i天空博客 ]Sf7c(f!N#~
done > foods天空博客 ak/S8A8}9d3j
天空博客4PLifXq
//重定向输入
.|Z2u m*V1d!bT0while read i
'rX#SU(JpVc0do天空博客B"f"V-s v,M0sO
 echo i
K3Nv)W _7L0done < foods
,yF Y&b+A S@o3W!L0
?&Qs^Jz1@0
mkx7q {0trap(捕获指令)天空博客9e Y/v-h.sx7c1C
trap 命令 信号
bytn/wh/j0例:trap "echo GoodBye" 2 //捕获Ctrl + C天空博客&S6~BAl
天空博客4J*Lk \%\ X:|:g,n
常用信号天空博客l.gGhl,c.z
0 程序终止天空博客[+[&Z*cG_B l
1 挂断控制终端天空博客+^T1I*^f(pil7}
2 按下Ctrl+C
h2B,Xc/x GO03 按下Ctrl+l
6RA!Oe,AU8m09 杀死一个进程(这个不能trap)
TMQ.{ ?015 利用kill命令终止程序
.P4z4xj5|K:z024 按下Ctrl+Z(这个不能trap)天空博客^VA"P6ep
天空博客 h;z7mz^ O4m

o1P TK}'r\w`0(完)
N&D'K^%H-Y'H0以后在陆续阅读一些脚本增加编写脚本能力。脚本编写这一课我算是补上了。
U,UNXhCr0
'k ~!XS1vE4l6Q7w T0PS:因为是写给自己看的,所以写的有些乱,呵呵。
6u x9C/oxN m0

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