像我儿子一样永远保持好奇和梦想

【读书笔记0103】Beginning linux programming-shell programming

上一篇 / 下一篇  2012-03-05 11:14:30 / 天气: 阴雨 / 心情: 平静 / 个人分类:linux

学习体会:本章内容比较多,我这里按照自己的理解重新组织了一下,希望对读过这本书的同学有帮助:
kkJ;PvB0
shell programming 是linux学习的必经之路,也是必须学好的,经过一段个人体会是:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台M-sE m~O
shell 编程主要是考察你对shell 的一些结构组织,标识,命令的理解,这些都是日后读scrips所必需掌握的东西。
4o1[pD*\V:OK|!c0也许实践才是学习shell的最好方式,所以这一章虽然读完,感觉很多东西只是理解并没有达到能应用自如,这一定需要比较长时间的实践。龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台9a`s$\ayJL
这章节,作者依旧娓娓的将shell里面的各种复杂的知识做了归纳,由浅入深,非常适合基础差的同学。
7Oy x[E0感觉,有经验的如果能仔细看一下这个章节,也对自己的是个系统整理的过程。
F~!A&c%O ]0
What this chapter tell us:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台.GoV n1B jh
- what the shell is
/]y!V y.^F8F.kX`/R gR0
RUo(X0SqW3aAx T0- basic consideration
x1n6poGV9G K0
8HQ'R-k(r%X`7b0-subtleties of syntax:
^Vw.E/K0 variables,conditions,program control
2{WD?+Y-R3Q b0 lists龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台*_0?F*F0[X-d
 functions
6`z3_Qg#u0 commands and commands execution龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台~KRYg4^ r:q
 here document  龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台O8LX*a:Nhf
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台0ihE4e8n
- debugging
h};TKm(Evha0
lcT4^(@*}6p0- grep and regular expression龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台)a,D6`{T;S
- find龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台j!?i;V9M;i

- what the shell is 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台iIn8W2qs7i
Beginning of this chapter:+
N?Hh,D^01 why we should use the shell?
tYDn AL0- shell could easy to run at the very complex program which are not time-critical。
~ bX*[]~0- shell use the interpreted ( 解释性) language so not only your can execure the commands and utilitie on the shell but also you can write them.龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台]tR'IX7w
[hsy75] what is command and utilities?
5X"?j5g E0D0e.g.龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台/J_e5ec
$ls -al | more龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台[a,_ HtH(TN
this command use the ls and more utilites.
&fLNCw9f m0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 ^;^P7OG

*s0I$x0a-F7q_0C02 what is shell龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台d%A"c q6j-@-n
is a program that acts as the interface between you and the linux system which support the commands.
2YO"m$V`0
- basic consideration龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台dJh?-U$zx pJ-K
Pipes and redirection ( 也就是用于控制shell的输入输出)龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台|tU@ p g%IR y
Redirection:
~R8ydh(M \L.cf0[hsy75]个人理解,在default之外的输入输出定义都叫做redirection(< > >> ):
3]5W)YO3G7m8b QA0default:
J] L G&Z4b0-0 input龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台c/oSf]S
-1 output龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台}S|&R~b9o
-2 error龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台8@~Y _"\!mrz%K Q @
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台2^ V7A+t6[| Z
>> used to append to the file:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台3s7@:O&`4ln1|
e.g.
+BZXT(VPss0$ps >> out.txt
Gi e/A#iu0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台PXv8H;VXp HE~*G
>& used to combine two outputs 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台O2SCE ~Q)h S9ZB-w
[hsy75]2>&1 often used to get the error code to a file龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台)cG1V0RSupX
e.g.
V.d[:|y4S%Dv0$kill -l 1234 >outerr.txt 2>&1龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台&l Wl a4|!Dpc/XPS
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台C)w7t[4nq7?n/z
Pipes ( | )龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台h[u8DShx]
[hsy75] Pipes 就是自动同事处理多个流程到一个你想要的结果
z-u X k5BBq0process connected by pipes can run simultaneously and auto rescheduled as data flow between them.龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台F.reH-k1nb4q9ku G
[frankhuang@localhost bin]$ ps |sort|more
5?h Qa/?K ]011220 pts/1    00:00:00 ps
11221 pts/1    00:00:00 sort
11222 pts/1    00:00:00 more
 6800 pts/1    00:00:00 bash
  PID TTY          TIME CMz
;\Vkg NC3{0

 Shell programming = script. creating
 1 wildcard
通配符 expansion
W*PJYo;U#['C0shell programming 你必须了解通配符:
-u!u*KX4T-d z$X0*
gR hg2Bp)C0?龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台*b9oT/S!l#QW1z
set龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台3H'n|P!y7Z_
^set龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台.I/Oe5LfR|@
{}龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台#nx@%ij)b6U
and so on:
2m_1S [ ~)}U0
\P[?hF02 to make a script. executable龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台z3W-}i:O0kq+Qk
[frank@localhost ch02]$ chmod +x first
'?QBUT;Vm0
j`7yf3]#n Y|0
:z)l5j y(e2b']U/}0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台:rX${6Z&e9M2Mw

-subtleties of syntax: 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Q2l)x4V!}k'f
变量
variables龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台\5`#ZDkK
[hsy75] 一般shell 变量就是指: a variable by preceding its name with a $
.N OZ7P,VLY&z c["J0常用的检验变量的方法就是用 echo 把他打印出来

/kW}-H.ogq.v0
变量定义时候要注意下面几种quote 的不同龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台} DA0X&It.@"l
" " 括号内均为变量 [hsy75] 好的习惯是用这个东西把变量wrap起来,从而避免shell出错 e.g $"test"
'  ' 这表示里面的是字符串 这个也很有用 当你想输出默认字符时候
WYPl&f.d0   eg.  龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 []"`4hB
    y='$'$x   // x=100龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台9w+i7I0L#H CY3[
   echo y
|$[Tf fK7N/q0   $100
G#_1W!|Sq0   这里extra 符号$被打印
\ 反斜杠又叫去功能化标识,用来是上述quote 或者$失效
oU2] Tz&o0
(R6b,~3M&{1M0位置参数变量符
~%}7px9h+K#h^C0IFS 用来定义字段分隔符
3OSa)r-vh!cG \0$1
3oL om ub"V0$2  【hsy75] 这里 1,2.。。aaal parameters 是shell里面经常用到的
*H?v!`5KO8R4R0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台0?g6Fy#u!G.a$M
$* 去除ifs定义的分割符
h*\.K T1bUS8Y0$@  不
去除ifs定义的分割符
[cE W3y9v_0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台[PM5l)ruH
conditions
program control龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台/y^9XpC$xV
(if for while until case )龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台1JB M\p/~
[hsy75] 这里和c很像,可以忽略龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台N4b6X0S:o7O"uq
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台~.g N"pFM*^lO
注意一下:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台M0B1j,[3R/ZYX ze
[ = test
I's-N!t1vp0
test include 1string comparision /2arithmetic comparison /3file conditionals.龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台k9I${u!jHD t

%h9n f3h;SvHy v4BQ,Yl0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台$c&Z,opG
list( AND OR )龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 l|:N(x!j
e.g龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 sM T@7P
记住这句就ok了
o+]b+\6Vz0[ -f file1 ] && command for ture || command for false
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台@W8`^ { c

e$TY|&v @US0
functions
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台:O0i+i4R6e
shell的函数最重要的就是理解位置参数了(aaal parameters),用户端的输入或者是函数参数的传递都是通过这个

eg.
V,r \f` Y%V;})?0
用户通过shell输入:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台;V~6Bs+O.ahe
Frank Huang
5JK*ly F'~0那位位置变量默认就是:
'x e+D$~ j3AKE.S0$* = Frank Huang龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台W(s T3BHV(U
$1 = Frank 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台8x2A-m"vM5}w,o
$2 = Huang
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台JU(O-P5M
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台.^,r3B_,X%o
和位置变量非常有关系的是命令set ,set 经常被用来根据变量来转换为位置变量:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台j3W l~?s(n$O'g"l2n
经过set 命令后 data 的值就给了位置变量可以被shell利用了龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台qS].`L3qaY&e
e.g
0C nw%b _/t0set $(date)
echo the month is $2龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台c7e_6wXOC xk


Vjo Dz4n5l0
 commands

%FOFl2j"ni&?6\0:                    = test龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台-Iv{gUh3SA8D
.                    = current shell
8BW+Pba|VH*|0echo            这里再一次提到 \的escapte的作用
%Iv*y4X(O%I A l@7g0eval             = $( ... )  [hsy75] extra the content in brace , means give you the value of the value of a vaiable
l0vhXk9_#^0exec            replace the shell 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台h~5{*s`
exit  n龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台v3LG"w J,? s
export         just creat an enviroment variable which can be seen by other scripts
ttXe j:k|t0expr  (expression evaluate)          = $(( ... ))   [hsy75]注意这个和前面的 $(...)取变量内容不同 是double parenthsis , 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 {lD+bL P
printf
f k jI.c%aBr"i"j0return龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台2GF8[/\4F
set             很有用的是将一组变量的field 和位置变量联系起来龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台q B7M2YoyD
                  set the para variables for the shell
]Sx-y;O6e1WY(d'_0                  eg
&w/?j/zu0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台p!Nc/@zUS~ \
                  echo the data is $(date)
                  set $(date)
                  echo the month is $2
){ e.pY s g0                  龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台)]rZ1kZ|a
shift 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台a*AC/ae+j'\r\p
trap
Bd,M4x0V1^0unset龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台r3OK&WRf_X

*O%L0JFH0two useful commands龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台n(P cTKA

M0b@ Mw }/F@\;j ?0find (search the file or directory) [hsy75]diff from grep which find for strings
y8gh7li'K0T2af4Y0syntax
&FI9P6Gr"G0find [path] [options] [tests] [actions]龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台9zd~MN:E w
eg.
,H.J/QlK,C"yK[k1S0$find . -mount \(-newer filename -o -name "_*" \) -type f -exec ls -l {}\; -print
1fo-ZrOl{0[hsy75]上面这个find 看起来很难,我归纳一下书上的解释下面一下就其实简单龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台O`i0h s7mkZ)~
$find .[path=curernt directory] -mount [options=do not search the other files system]\[quote the braces using a backslash to escapte the meanings in shell]([combine the tester using the parentheses]-newer[tests = newer ] filename[tests newer's pattern means the filename is older than the finding file] -o[tests operations means OR] -name[tests= name] "_*"[tests'name pattern means name started with an underscore ] \)[escapte the parentheses] -type[tests type] f[tests type =file] -exec[actions exec] ls -l[the command that we use invode by action] {}[used for -exec or -ok means the full path to the current file]\;[means the parameters on the line of action is end so it is a termiator ] -print [another actions that to print the result]龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 O9aTV#k*_ B9NX

"G7bH9l5j:q0grep  find 的兄弟,经常一起用 find for string :said by writer it is quite common to have grep as a command passed after a action -exec when using find 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台y:ku]x*l&I y#L
grep [options] Pattern [FILES]龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台bvkOV.G+k)^(}
[hsy75] 看起来grep 是非常简单的,但是,当你开始接触 regular expression 的时候,sophisticated would occurs
%~cK6{#~`5S:C.Q0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台:p0DFx-^bT
regular expressiom
$V/X*vwkCZ0
     anchor to the beginning of a line
$     anchor to the end of a line
.      any single character
[ ]    range of characters
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台qH-a&p#Kz
[:blank:] special match patterns,the blank 可以被其他参数代替龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台U)r5c3q;P
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台#k!S*U.]R;vVhdV
-E  extended matching 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 e Yp6[0X_#FZ
[hsy75] 下面这些是给-E扩展用,所以必须都用\来escapte shell 的功能龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台8X&Zm0r z`!a+iM,v
?
q8_8g _/R0*
6xDI+l yE#uW$M,H0+龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台5s0G#t.O)HB,?
{n}
H,RY[Uf%t"Ot k2T0{n,}龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Y6eDs&[nn,X
{n,m}
I7a8r:k-a"I@)Ma.r0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Lj Q[sHAX:QER
e.g
*?{+j2tW;P#o|-f7L h0[frank@localhost ch02]$ grep Th.[[:space:]] words2.txt
The handle toward my hand? Come, let me clutch thee.
The curtain'd sleep; witchcraft celebrates
Thy very stones prate of my whereabout,
G6OrI$TI$U0[frank@localhost ch02]$ grep Th[匹配Th].[匹配附加任何一个字母][[:space:]][后面紧跟 空格] words2.txt[被查找的文件名] 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台oI`WeB3\$G c
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台t#~q3s3wdZp
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 \/x5d? E8f1j
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台|.D qJ!vB;E3F
[frankhuang@localhost ch02]$ grep -E [a-z]\{9\} words2.txt
Proceeding from the heat-oppressed brain?
And such an instrument I was to use.
Thus to mine eyes. Now o'er the one halfworld
The curtain'd sleep; witchcraft celebrates
Pale Hecate's offerings, and wither'd murder,
With Tarquin's ravishing strides, towards his design
Thy very stones prate of my whereabout,
S_KaA|0[frankhuang@localhost ch02]$ grep -E[扩展支持开启] [a-z][range of characters] \[Escape for shell of {] {9[有9个字符匹配也就是单词长度为9] \} words2.txt
X/tYB](x!J0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 Q z1^8wJ9kl

and commands execution
(n bt'z}-v$p P01 $(command) = '\command'\龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台&Z'CuC`oK
we often need to capture the result of a command exexution for use in the shell cript ,the above syntax helps put the output of command into a variable .
(`i4~KX8Q0the ability to put the result of a command into a script. variable is very powerful.
i W_!n.HM0e.g龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台~W~0T,Pk

&L g,Ob-Pyq0set $(who)
writer = $(who)
echo $writer
/xBy cd0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 d(YZ\"zk:EL
2 $((arithmetic expansion))  = $(expr arithmetic expansion) 注意这里是双括号龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 @}/WWU+Jq#\|8H

%scb5KU!t2oM0Parameter expansion
3dOf)^y2g+om_Tn03 ${variable}  变量拓展和保护
"ZK\v)Lv@ u03.1用来保护shell的扩展时候,只扩展对应的变量龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台B?u G9QcQx$} m
e.g.
.R)l:n{fkDw0
for i in 1 2
do
    creat_file $test_{i}
    creat_file $test_i   报错

done龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台AJPTd,x1^.{{
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台`v0j;kIU;l'~,TD
3.2 参数扩展龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台4N,{q X;n i[NsHH0o1n
${param:default}  龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台E,~*d2m:k:LU
类似的还有下面变量扩展参数
4am3Y xjA4g[*| u0#       从头删除匹配字符,如果多个匹配,删除最小匹配长度,并返回龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台1FEg|:lh8}J
##    从头删除匹配字符,如果多个匹配,删除最长匹配长度,并返回龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台+w*Q!\,Y%u k$Ap
%    从尾巴删除匹配字符,如果多个匹配,删除最小匹配长度,并返回
&m Y _s,k[/@,T4j6E0%% 从尾巴删除匹配字符,如果多个匹配,删除最长匹配长度,并返回龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台&YG*Y3Nm4n
参数扩展,在redirection output的时候非常有用,龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台!~6U/~hH+s%L0Y
since linux are havily round the idea of filters, the result of one operation must oftern be redirected manually.龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台bI})`,[ {*vv
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台D,D|)q2R)Qi
e.g.
%C5zBx V&kG$P } EO0for image in *.gif
do
ctw Q@ OR)y+D0cjpeg $image > ${image%%gif}jpg
s^J JW1C1z0【hsy75】解释扩展如下
cjpeg[a program to convert from gif to jpg] $image[get the file name from the *.gif] >[redirection] ${[圈定需要替换的变量] image%%[从尾巴删除匹配字符gif]gif } jpg
done
N$Q`*^8N9~d$o0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Du:|2q n1V8r1SW
比如 draw_0001.gif  将变成 draw_0001.jpg龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台/CP1H9|S l9`+d4h

-\b`1GJM0eg.
({0F,kg1Vn5r(n;y0#!/bin/sh

unset foo
echo ${foo:-bar}

foo=fud
echo ${foo:-bar}

foo=/usr/bin/X11/startx
echo ${foo#*/}
echo ${foo##*/}

bar=/usr/local/etc/local/networks
echo ${bar%local*}
echo ${bar%%local*}

exit 0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台-n `.~ t!jF

D G n\,|_.c&e0
Ok Nt/|Y@i&Qd-X3J0bar
fud
usr/bin/X11/startx
startx
/usr/local/etc/
/usr/
T Eggg6h,gZ0
 here document
w`$d y|*wS0其实就是像自动命令的输入,可以和编辑器绑定起来,从而实现通过文件读写来直接运行编辑器里面的scripts
}%vs S}%gL(v0e.g龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Qtt_O@Q
#!/bin/sh龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台'B1F9|+ejgbs^wA-[
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台:iqW5k"vJ\
ed[编译器ed] textfile <<!FunkyStuff![here document的makers]
0H:VgoP4N(n8r3]e03 [ed 编译器命令 move to line 3]
1Yz5s+b iNf-ty0d [ed 编译器命令 删除一行]
KN~`(Ml0.,\[这里避免shell的作用,从而shell执行的时候可以将$后面的东西看成是非变量,从而保证ed的command 正确执行]$s/is/was/ [替换 is 为was]
9y`+E'^/Y0w
5J)juz'n*MG!|0q
l@O_{0!FunkyStuff!龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台&xv*VD RB

:S\A D5T;}dR0XJ0exit 0
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 @ Y/`:[ j-s5c[

'?8\T0V]/J*Sd0This is line 1龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Zp,n ro2O SwU8[*G
This is line 2
Ly&Q.B8w3p^3H-t[0This is line 3  被删除龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Q5?U c:},F"{@t0O
This is line 4  被替换
W W8OLm#u+g/q0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台c!\&b-i,X
将变成龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台j4atU8G.v/[
This is line 1龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台.FO#q;]mJq
This is line 2
;\8Dlk#mBh"W0This was line 4
-^zA"aLY$BqVvy0
9SU-a1hU.d&{8Ge#b0
debugging
:Q7hv[9\)l9T:q!f0-n check syntax error only 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台g7D1rs;X
-v Echoes commands before running
;x8bs)u3D6imdg0-x after running
+N zQG3P:j0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台ib i5RR|^3|
set -o xtrace
o'l0vTCLa3x m0set +o xtrace
!?'K Ua C;T0
)K4MY7Fn;Z0?U0其他的调试选项龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台@y;? l#MT4E hj
-u
Q$?)I|pq3|k I0-o nounset
.y)F%X1[$D6U1yS0-o verbose
:?K!z5RSq@0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台/r[Q6SZM+B3D
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 \.DI9}b[xhun
我们用上面提到的例子再来说明一下如何调试:
q-B(@ f"G.dEO01 没有调试:
2N)g'\h1Z~6I m0[frankhuang@localhost ch02]$ ./param
bar
fud
usr/bin/X11/startx
startx
/usr/local/etc/
/usr/
1Wcg6I:J+M\0
d`(zlf6SD02 打开set trace调试
9X:w^+s S6G0[frankhuang@localhost ch02]$ set -o xtrace龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 r,n"V D |i
++ echo -ne '\033]0;frankhuang@localhost:~/beginning_linux/beginning/ch02'
[frankhuang@localhost ch02]$ ./param
+ ./param
bar
fud
usr/bin/X11/startx
startx
/usr/local/etc/
/usr/
++ echo -ne '\033]0;frankhuang@localhost:~/beginning_linux/beginning/ch02'
^ B9Cv^A0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台(xs u]8xL8HB
3关闭set trace 调试
9},|.x,@['?0[frankhuang@localhost ch02]$ set +o xtrace
!Q2^AL.Iq)\F3]0+ set +o xtrace
[frankhuang@localhost ch02]$ ./param
bar
fud
usr/bin/X11/startx
startx
/usr/local/etc/
/usr/龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台'[;Y7s(}v\P

"O#zMkc n@04
/h1?+Y"cFk*t3aF E0[frankhuang@localhost ch02]$ sh -x ./param
+ unset foo
+ echo bar
bar
+ foo=fud
+ echo fud
fud
+ foo=/usr/bin/X11/startx
+ echo usr/bin/X11/startx
usr/bin/X11/startx
+ echo startx
startx
+ bar=/usr/local/etc/local/networks
+ echo /usr/local/etc/
/usr/local/etc/
+ echo /usr/
/usr/
+ exit 0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台5p"R f!W4JK

M m&\9n#oL@D M05
e!["h G/_-we0D0[frankhuang@localhost ch02]$ sh -v ./param
#!/bin/sh

unset foo
echo ${foo:-bar}
bar

foo=fud
echo ${foo:-bar}
fud

foo=/usr/bin/X11/startx
echo ${foo#*/}
usr/bin/X11/startx
echo ${foo##*/}
startx

bar=/usr/local/etc/local/networks
echo ${bar%local*}
/usr/local/etc/
echo ${bar%%local*}
/usr/

exit 0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台&WN1F;Kd+Ze

going graphical - dialog utility
p)w/Kl!Zl%DX N/s0图形输入工具,这个再编写大型的shell配置文件时候经常用到龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台)nR%_{2]T P
e.g
4T(mjl.M+U0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台@ o;Ev}NPW1~z

the doc in under development龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台(af&W9rtZ
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台A*L?/QoEB4a

TAG: linux Linux LINUX 读书笔记

 

评分:0

我来说两句

显示全部

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

Open Toolbar