Linux脚本学习笔记

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

 用Linux将近一年了,一直没有学习如何编写BASH脚本,准备十一看一下。今天稍微看了一下,做一下笔记。
4t9Iva!e_m{0天空博客Q l;v@}0[`
变量:天空博客Kx.u Em+m5bVt
  用$+“变量名"表示。例:$name
j.d_u E&_0引号:
%MaM*\G0  ""双引号,双引号里面如果包含变量,不会求值,例如:echo "$name" 输出是$name
Y#xfn8_0  ''单引号,单引号里面如果包含变量会求值,例如:name="JanusLe" echo '$name'则输出JanusLe
D.Zf'H`-XS5s0  ``反引号,反引号内可包含命令,运行时候会先求反引号内的命令的结果,比如: cmd=`ls` 则可能输出a.c b.c(结果和运行ls命令一样)天空博客P3RO7U!g3Y
  \斜杠 ,有些字符可能是BASH的关键字,不能直接输出,要用的话加\。比如要输出句号可以这样\. 当然也可以用单引号或者双引号包含。也可以达到效果
``x/I:B:V8tJ X!M6M0
b$YSUU9}Wd0参数
sHKsWd0  脚本可以接受输入参数。类似于C,第一的参数是$1,依此类推。$#表示参数书目 , s*,s@可以存放所有参数
]q_P)cBe:M0 
Nw1`],CY0导出变量
u.CaJtSQU b I0  如果有两个脚本a和b,b要用a中的变量,需要将a种的变量导出才可以用,具体方法是export 变量名
9g2|/he u M0天空博客/~2|6V.k eW\+gl,wH
let 命令天空博客M]7X!u-tI
 如果需要命令进行运算可以使用let 比如 let a=1+3 则a的值将为4天空博客 gcE Md]!w$pz
也可以用双括号达到相同效果((a=1+3))天空博客D#t/i4s F v a2w vL

bs;H j&R8b0test 命令
5j\6D Ec6J0  用于测试表达式,格式:天空博客1G8UO,f!G)k
  test value -option value
/mts?{.@0  比如 test 3 -eq 4 //比较3是否等于4天空博客L,t(~ G)e;x
  可以用两个方括号相同效果。[ 3 -eq 4 ]//括号左右一定要有空格天空博客7lM1v D6dR
天空博客{M p#^ Hx
注:可以通过输出$?来判断上一句指令是否成功运行。0为成功运行,其他值为运行失败天空博客!S,_6kgzzd)]])b

0v mhX|c|\G1|4L0条件判断天空博客A ? e#C8z\Y
if 条件
"N,ch#d:W0then
2z-Yg5H!Cw0命令天空博客's O\2w^cY2w
else
'~sh!B(I+VI0命令天空博客uX E x&]"[ wZ&d
elif  条件天空博客aNz[ xe CE
命令天空博客)^;VZDWa
fi
.GV] XK{z4u0天空博客7d9RW1@k#K9S
case string in天空博客w6v!n*k%D+b _r
pattern)天空博客K,ZKF2bOK
命令
,YiU` lN0;;天空博客4Y/YSF N%~
pattern)天空博客2HfE.Jf
命令天空博客)gd;v:|fL:V
;;天空博客:MP*Z;D+D8J){
*)
Sb(E]5e!~'[0默认命令;;天空博客Nk4k2SQU |
esac
6W c@W?9C!s ^0天空博客9_.Wrb$z#x0G)E
注:pattern可以用正则表达式
#f Uk qu(x/WF u0可以使用&&或者||进行与,或运算。
)A'|-@2g Y$Z:uc0天空博客4[({{TA
循环
YKpTsd5Ked0while 条件
_]Z} Q'zP&ZG _P0do
)v0uh'T}W0command
].[:~%Q-m0L0done
"B-_8\.M;hB2Q0天空博客7e3a(U3|Px;S
until 条件 do
4m'^k2o ^4i$NS0command天空博客vi'O%WxZ W1u
done天空博客*E `yD*|6D
//条件不符合,循环
:x oD!C BT1Z|k0
v${SKL2nO0for var in lit-value天空博客gyQ(o.~ K@5i,G}5C[
do
w0n s.St^.sE&b8w0command天空博客j/q6_ Ak/v!Mc"~
done天空博客RK(]kZ5Gr&y)a
例:for var in *.c天空博客1z dX;H0A
do天空博客s;\!R k8O x ew
echo $var天空博客_C3_-h!ALsc2K)N Z
done天空博客V'_$es8d~
//显示所有c源码文件天空博客3r P~$Z.W
天空博客IT%MY fJ3f
for var天空博客cbIY#xc T
do天空博客agu"a3@'WI,k
command天空博客8`!z,M dU3hR`6h
done
~!L(YWgL1P _(]wN0//这里var的值列表来在输入参数天空博客Ml(`h] M;r8JV3t4z
例:天空博客0M$E0MyQo1a1_
////////////天空博客,BB&]1Bc iXf
#!/bin/bash天空博客+ER6t%vg,i
#while.sh脚本
%t4Sq~h }0for var
2}sU3qA X{2E1gU!P0do天空博客 Dt{+v+E9}Yz
echo $var天空博客 { N!ic L%m5xk
done天空博客{8L0X%\ {EE
////////////天空博客_'f o!Bv+uVREy"c5n
天空博客.K}s%o?
$./while.sh a b c天空博客l,]B G G
a
YejF W1G0b
U{8c9^Ce0c天空博客.E|w;r5}.K%i%Hu#Vh
天空博客"\V X5cE p
true false break continue
A@Y1m(y^0
'KGMt2B8i8U0
.`%V'R.T(]s1XB2A(G0在控制结构中使用重定向和管道
]1[j:U g/m:t0天空博客 h?%x"_{P
可以重定向控制结构的输入输出
Z6ptT+p&I` XDm0
//重定向输出天空博客1]'q5Wu o(h
test="milk cookies apples cheese"
Am;W;S&c0for i in $test
m^| Uv0do
Lz0Z!P'j r\0 echo $i
S ab*X*sv{0done > foods天空博客6Y3QV;| QBgO
天空博客7t*? hR'tD9s br y
//重定向输入天空博客Q3l ?7b1L {Y_ C3E0P*e
while read i
I%A#b2o.W0do天空博客 [;C$HoA$Q)RN
 echo i天空博客]w:Nq(Ip h*G$z
done < foods天空博客?7gf9{,Oy6w5W
天空博客9GpZ}E X&y
天空博客QfJ6P0{
trap(捕获指令)
'~"uj(},h8A1_0trap 命令 信号
K)}1T9c6B2T+PyB0t0例:trap "echo GoodBye" 2 //捕获Ctrl + C
bR~q:@Oo0
3h,}fJT3zN8P3j\0常用信号
)c!Z+|WX.~00 程序终止
^O0I\k7m-D'`01 挂断控制终端天空博客)L oKo-gJY
2 按下Ctrl+C天空博客8Z](jrqJU
3 按下Ctrl+l天空博客#Zu p6Pe
9 杀死一个进程(这个不能trap)
3c*WLk6kmgl3k015 利用kill命令终止程序
$DK-cG/n\`N#]024 按下Ctrl+Z(这个不能trap)
^-_NvATK0天空博客J j@H3k
天空博客5O1w MgXJ
(完)天空博客,H_X3c+D"?8`9qe
以后在陆续阅读一些脚本增加编写脚本能力。脚本编写这一课我算是补上了。
`c9MT5E!u0
%`,N3UD+k`(Ax0PS:因为是写给自己看的,所以写的有些乱,呵呵。
?u"U)zg6TI0

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-13  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

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

RSS订阅

Open Toolbar