EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
由于工作的需要,越来越多的接触到linux系统。最近看了《Linux与Unix Shell》这本书,安装书的章节整理了一些自己认为比较重要的命令,方便以后查阅。 * c6 h2 o2 L% \
No.001 文件安全与权限1. umask 决定了新建文件的权限 & M3 p' `7 R% A7 p! f
2. 软链接(符号链接) ln -s source_path target_path 0 M' {' `* B k/ P/ F7 A" @6 d
No.002 find和xargs1. find pathname -options [-print -exec -ok] & ?( o3 W+ @! ~+ a/ P; I% N
其中exec参数的命令格式: 'command-' {} \; 注意必须包含【{} \;】
! D% ]5 _& p+ R) l5 i" e -perm 按权限来查找 ex. find . -perm 755 -print
- a7 J0 H2 m# |' \% n9 x -mtime 按修改时间来查找 ex. find / -mtime -5 -print 更改时间5天以内
8 V4 S+ m' ~: D4 O9 R3 z, @/ [ find / -mtime +5 -print 更改时间5天以前
3 `% R7 a6 b0 b- o2 G2. xargs与-exec和-ok类似,但是限制更少,也更快
, i5 V4 A: C9 ?/ S 3种参数的命令:find . -name "*.c" -exec wc -l {} \;
7 T' X [6 `8 o; p5 r' B find . -name "*.c" -ok wc -l {} \; 每次执行命令前有提示
/ V) _. R7 A" G' N7 K' o find . -name "*.c" | xargs wc -l
, ?1 z* y! e2 |No.003 后台执行命令1. [crontab] [at] [&] [nohup]四种 2 o! f Q3 G! ~6 K2 f' x! ?
No.004 文件名置换1. 列出隐藏文件 ex. ls .* 0 C4 N4 Q7 h/ b, Z: P1 f- g2 V7 N
No.005 shell输入与输出1. echo输出时加上 -n 参数不换行, ex. echo -n "aaaa"
+ `8 b' H# g9 [7 S2 ?2. tee 命令可以同时输出到屏幕和文件中 ex. ls | tee file.out
9 r T. i9 c. ]- p+ }3. 标准输入 0 标准输出 1 标准错误 2
& R0 H8 q1 `/ i- L8 N4. 将标准输出和标准错误输入到一个文件 ex. command >file.out 2>&1 ; W4 V m7 F! M0 B
No.006 命令执行顺序1. 命令1 && 命令2 命令1执行成功后才会执行命令2
) {: q8 @* Z. s" X. u' g2. 命令1 || 命令2 命令1执行失败后才会执行命令2 + I( P1 }$ d. j" D$ Q6 g+ V, z) R
No.007 正则表达式1. 正则表达式元字符及含义 - S" t" H1 Q0 E# D' A7 t* ^+ _
^ 只匹配行首 6 G1 K9 ]* ^* l$ |# `. |
$ 只匹配行尾
" s& S H2 N, I! j( x1 T * 匹配0次或多次 G' r; g0 E* F+ h. h @
[] 匹配[]内字符
' ~% X2 n; c: S7 a+ n3 ~# l \ 转义符
1 o6 T) f5 ~( l) a . 匹配任意一个字符
* p1 I9 E+ o. g0 o6 Q pattern\{n\} 匹配pattern出现的次数,n次 - \2 W' N# ^7 U. b, d, A
pattern\{n, \} 同上,最少n次
* |/ a" X0 y4 F8 H |) q pattern\{n, m\} 同上,次数在n与m之间
, x- G6 }3 F- |6 p2 _% {% VNo.008 grep1. grep 主要选项及其含义
( ^. z4 c8 \" r- ]1 @1 w2 Y -c 只输出匹配行的行数 # P* ^* n, R; v" R. d& T
-i 不区分大小写
0 R0 t0 m, c% W4 B: C -h 查询多文件时不显示文件名
" F$ W' F: d* M2 z -l 查询多文件时只输出包含匹配字符的文件名
3 n5 v8 R( o" M -n 显示匹配行及行号 : y. c6 u( z1 J1 r( Q
-s 不显示不存在或无匹配文本的错误信息
7 ~& ?% m+ D t _- c -v 显示不包含匹配文本的所有行 $ S. E L! C3 f0 A+ t" o
2. 查询空行 grep '^$' filename " Z6 W9 R- P j' t
3. 类名及等价的正则表达式 5 H+ u' s, H! L: E# i3 d
[[:upper:]] = [A-Z]
$ w6 \" K# z! H! p [[:lower:]] = [a-z] . g& `4 \) ^6 T0 T
[[:digit:]] = [0-9] # T) j2 ~6 C1 I5 r$ Y: h* b
[[:alnum:]] = [0-9a-zA-Z]
# [( V! Z- b9 h [[:space:]] = 空格或tab键 3 j9 h# [; H; l' |0 W
[[:alpha:]] = [a-zA-Z] 8 h8 B d$ M) U* g
No.009 AWK# awk的主要作用在于将文本分成各个区域,便于分别进行处理 + R8 O3 R( l/ A+ R" w' X
1. awk -F指定分隔符,-f指定awk脚本
- N& ]1 q- }* v) E$ p& x" P: n ex. awk -F: 'commands' input-file(s) % ~( g! H3 {4 [8 s/ U" ^8 T
ex. awk -f awk-script input-file(s) / Z/ s( x# u2 X5 m3 w* o; S
2. awk 分隔出的域用$1,$2...$n来表示,其中$0表示所有域
2 N7 _' j; m' R$ K V, K6 U# V' p8 }4 k$ a3. awk 条件操作符 <, <=, >=, ==, != 3 H+ b" I8 N# y5 E! f: h9 x) r. W
~ 匹配正则表达式 !~ 不匹配正则表达式
8 t- j% U* [. F) r* r% z6 e4. awk 内置变量
! w5 @6 N/ i. H/ \ ARGC 命令行参数个数
) n) F# `4 C; L% U1 y& j: ` ARGV 命令行参数排列 ! J' @9 c( D; a: ^" J8 _! e. I
ENVIRON 支持队列中系统环境变量的使用 , n3 B8 ^) u# }8 ] z" S
FILENAME awk浏览的文件名 # h2 [% @6 M* p9 }+ B
FNR 浏览文件的记录数 3 y/ b+ N# Z2 u% ~" P. h1 V, C
FS 设置输入域分隔符,等价于命令行-F选项 / n% t$ j0 H$ r O( M
NF 记录的域个数 3 d: _2 \& D# g W
NR 已读的记录数
4 b6 h0 u; D* k$ Z OFS 输出域分隔符
( _; ^+ o5 k% z7 r3 P6 C ORS 输出记录分隔符
1 U, Q8 A; r/ z, f- x RS 控制记录分隔符
* }4 p; s2 G- V. f, e ex. awk '{print NF,NR,$0} END{print FILENAME}' input-file 1 c- N6 K$ S' Z" t0 s
5. awk 字符串函数 2 {! L8 a( x6 E" m
gsub, index, length, match, split, sprint, sub, substr, substr
# x$ b9 @# K3 i% k. h6. awk 中的printf函数可以控制格式化输出
$ |8 t' x0 _6 k$ N7. awk 的循环结构 For (element in array) print array[element] & |* z5 Q. n6 E8 D2 ?
No.010 sed# sed的主要作用在于过滤和查找文本中的特定内容
. n: o" o, ?' A6 w+ L! P1. sed 命令格式: sed [options] sed-command input-file t/ I4 A$ R) S* t0 h h) l3 X
sed [options] -f sed-script input-file # m" `( l! g1 r8 z3 Q+ L- q8 m
No.011 合并和分隔文件1. sort, uniq, join, cut, paste, split ; O B- O$ I8 M/ |7 X8 f
No.012 tr的用法1. 去除oops.txt中的重复字符 tr -s "[a-z]" < oops.txt ( W3 f( H7 {; {% c- F, q
2. 去除oops.txt中的空行 tr -s "[\n]" < oops.txt
A, z1 Q3 y d$ m3. oops.txt中小写转大写 tr -s "[a-z]" "[A-Z]" < oops.txt & P h. D ~. t Y9 T2 Q# @
No.013 登录环境1. /etc/passwd 保存所有账号的基本信息(不包括密码) 4 c% h" M( t: m7 C: O; z1 o
2. /etc/profile 基本的配置信息,登录时读取此文件
5 v2 k7 \0 D0 | b R- F7 X3. $HOME/*profile 各个用户的profile文件,会覆盖系统的profile文件
7 ~, g8 c+ E9 ]: L9 o7 P# u4. $HOME/*logout logout(键入命令exit时)是执行的脚本 & p6 D) J* x" o# z# `0 V
No.014 环境和shell变量1. shell变量的设置方式 1 A6 c$ t u, p& Y& `0 J7 V7 }2 C3 x
Variable-name=value 设置实际值到variable-name
6 f/ ?! c. W; l+ h7 c; n6 ` Variable-name+value 如果设置了variable-name,则重设其值
1 e8 e3 r& x3 h5 @0 i% ]% {& L( P+ A Variable-name:?value 如果未设置variable-name,显示未定义用户错误信息
9 F7 X/ l8 q7 O1 A/ t4 g Variable-name?value 如果未设置variable-name,显示系统错误信息
# H- d/ O/ |* g3 ^' ^/ M( q Variable-name:=value 如果未设置variable-name,设置其值 * Y# [9 p; {$ I; a
Variable-name:-value 如果未设置variable-name,就用value,但是不设置variable-name 9 Q. Q8 A0 K( c, M
2. 设置只读变量 readonly variable-name U& h4 ~. R& m3 @( n( g! x
3. export variable-name 可以将变量导入到子shell中 ) Y4 l2 r& f. u7 z8 Z/ M7 K4 [
4. shell脚本的参数 $0表示脚本名字,$1表示第一个参数......$9表示第九个参数 $ Q y- P$ c0 S5 V
5. 特定shell变量 , D* v* P, B( [( Z
$# 参数个数 * |/ w- D. g8 g( Z5 b! l( C) \
$* 用一个字符串显示所有参数 " D3 m7 [: ]& n- c2 I4 T! { K
$$ 脚本运行的当前进程ID
1 i m5 Z0 w/ }2 E d$ v $! 后台运行的最后一个进程的进程ID / a6 |1 \) G8 Y7 e7 C$ O" f7 s h" |) {( h
$@ 与$*相同,每个参数作为独立的字符串
/ W* {% [5 @$ Z* k, l $- 显示shell的当前选项,与set命令相同 ( S/ v. R/ \; ~7 g& H: ?
$? 显示shell命令的退出状态,0表示无错误,其他表示有错 y2 l5 ~2 ?6 S+ @! A
No.015 引号1. 双引号("") 其中引用的变量会替换为变量值。比如:
# h! N- l) P5 K9 j [wangyb@localhost bash]$ STR="Hello world" 1 _- h; q! ^. f# J/ r: j
[wangyb@localhost bash]$ echo "$STR" " D: J- S. E6 @
Hello world
- l- m0 ]- q! s6 z2. 单引号('') 忽略变量和其他特殊字符,单引号内任何内容都当成字符串显示。比如: & S: m/ ?8 p7 Z) x. K9 l
[wangyb@localhost bash]$ STR="Hello world"
5 Z# _3 K- {0 o; f2 y n+ {' Z! M, {" S [wangyb@localhost bash]$ echo '$STR' ! S6 O7 f+ |3 `! b1 a
$STR
* a" P/ ^9 `0 n9 Y3. 单引号和双引号同时使用时,谁在外面谁起作用。比如
2 M1 I5 S; E9 H- L0 |; e6 @( J [wangyb@localhost bash]$ echo "'$STR'"
. |: n! l; l$ K1 n& N1 ^- i* z 'Hello world' 3 Q3 R' i; b5 O
[wangyb@localhost bash]$ echo '"$STR"'
3 U' V7 Q a, M6 d* a, d, Z "$STR" * d' x& i8 E+ _( l
4. 反引号(``) 反引号中的内容被当做命令来执行。比如 ; E, k& G" Y2 a; R
[wangyb@localhost bash]$ VAR=`date` ) |8 k# j, d5 F D0 y( E
[wangyb@localhos bash]$ echo $VAR
: a4 m, P$ R+ t+ f Thu Dec 22 22:08:07 JST 2011 7 s; Y# W+ C! a6 H
5. 转义符(\)
6 s0 |( s2 L, ?3 j* @+ gNo.016 Shell脚本介绍1. 脚本的第一行一般以 #!/bin/bash 开始
9 S3 Z: {) ], U8 s2. 给脚本加入执行权限后就可以运行脚本了 . v' \' K/ D" O" B2 T8 W
#No.017 条件测试1. 测试语法 test condition 或者 [ condition ] 使用方括号是注意在condition两边加上空格 , C" U0 X" y7 t- k$ x: n$ ~. R
2. 文件状态测试 1 s% X M9 c% e- |7 G# ], }
-d 目录 -s 文件长度大于0 . z; P1 l, F8 C
-f 正规文件 -w 可写 + v+ i# U8 Q2 P% f
-L 符号连接 -u 文件有suid位设置 , s) k r4 a7 \# m( t
-r 可读 -x 可执行 + A2 L4 [9 A4 I9 h5 M# [/ C# ?
例子如下:测试是否为目录,也可以用 test -d bash.sh 来代替方括号
& [1 }: h- q7 Z [root@localhost bash]# [ -d bash.sh ]
S6 T4 s B1 V0 h- l8 S2 K [root@localhost bash]# echo $? + Z1 a9 c( D6 f/ R: ^7 O2 h
1 / M P" Q [& O/ o
[root@localhost bash]# [ -d . ]
3 V) H, B4 g+ i! L" l [root@localhost bash]# echo $?
X, w$ Z+ B9 C/ L. H 0
- T! v( i; S8 o/ o7 L3. 逻辑与 -a 逻辑或 -o 逻辑否 ! 例子如下:
+ o4 l! T# R$ F, V [root@localhost bash]# [ -d bash.sh -a -d . ] 3 a: Q" @$ M( V1 {! _
[root@localhost bash]# echo $?
* Z- f! w$ Y0 u) q+ d8 q! f2 ^' [9 ~ 1
; c4 S4 F: D/ r3 q [root@localhost bash]# [ -d bash.sh -o -d . ] " [( ?7 x+ k3 ~+ }2 D& f
[root@localhost bash]# echo $? - r4 U! `6 U2 }. K: y
0 5 F" h1 Q) B1 \* r- s- O/ F
[root@localhost bash]# [ ! -d bash.sh -a -d . ] - D1 M1 b3 ]; `' T0 A$ x# _
[root@localhost bash]# echo $?
, g; Y2 h# [3 \! O8 C$ [5 [$ n 0
3 H! v. M( {2 ]1 f$ _. f9 i [root@localhost bash]# [ ! -d bash.sh -a ! -d . ]
. c; h2 Z2 ^' j0 [' f [root@localhost bash]# echo $? 4 I3 J! h y. T8 P$ V
1 ) {1 V# }& k: O8 ]7 X
4. 字符串测试 [ string1 string_operator string2 ] 或者 [ string_operator string ] : E5 r0 ` |" S
string_operator可为:= 两个字符串相等 , v9 N4 J0 z. }; ~! v9 \
!= 两个字符串不等
4 Q, o1 M: p5 k7 u5 K* [5 n- J -z 空串
/ t) p8 p1 D1 E7 A3 |+ N -n 非空串 2 F* G+ }' ~$ {
5. 数值测试 [ "number1" num_operator "number2" ] " }- t2 F: g. C' ]# A' u
num_operator可为: -eq 数值相等
8 {. d N: l; i& L3 O N -ne 数值不等 & c. ?6 U6 ]: P( Z* ^& S# l
-gt number1 > number2
& E# s2 H2 {# p3 B- ] -lt number1 < number2 D+ P% Z/ y7 H- m7 T, W6 M% X
-le number1 <= number2 ( _9 r, |9 g/ V5 D
-ge number1 >= number2
, `3 F' `9 S9 `: O' ~ 例子: [root@localhost bash]# [ "100" -gt "101" ] % }) y F g* @8 p6 `5 P& c" C
[root@localhost bash]# echo $? $ v. i# W1 M, ~* \# o" b
1
; D1 ?6 }8 x: L$ o p; v/ t [root@localhost bash]# [ "100" -lt "101" ]
7 d7 |4 W* w* y7 u0 k, X8 [ [root@localhost bash]# echo $?
1 c% b$ \( V* s! H' M 0
7 p6 d: t, A9 `1 E6 y; P, d6. expr语法 expr arg1 operator arg2 8 ?4 J9 K3 J, _
例子:变量自增
# k: `% L/ r5 I+ ?% {% b! j [root@localhost bash]# COUNT=1 " o) d1 Y/ x6 Y( g
[root@localhost bash]# echo $COUNT 3 l, a7 T5 O A+ R0 Q `: `9 k
1 7 S) ~' B, k" c# l
[root@localhost bash]# COUNT=`expr $COUNT + 1`
0 \1 @* m; M0 t7 L/ R [root@localhost bash]# echo $COUNT
6 Z& f1 B4 v- W' D( H& q6 f; g 2
5 U' o7 l7 x0 B0 ?# n8 uNo.018 控制流结构1. if语句格式
& \% N. c7 Q: c# n; O if 条件1
: d" w; F& b& B0 I4 H then / ~( b: w) L( z; l; W
执行命令1 % r# H' r. B" Q, i
elif 条件2
: ]* Q# z: M l' P then
/ D" H; a5 k7 k! ^& ^& {7 j; _ 执行命令2 7 }! K" g, E; h: \; h; b6 r) F7 X
else
' e4 `# Y* S& A! f, B: Y 执行命令3
* g! Q' Z. ^0 |) v% \ fi 9 h: a& l- t) E3 ^
2. case语句格式 5 a; D3 p* U+ S4 F2 j
case 值 in * ^ t( N9 B, T! U2 j
模式1) # k' V& @) S8 O) E' E2 Y( s7 L& _
命令1
1 K1 i0 \+ ]- V! L0 N ;;
9 m( Z8 D H! ]) Y: A 模式2)
* e! F" y) m8 |9 L" a 命令2
" d' R, w* p& H% ?" d9 b ;;
9 O2 X% y- ~9 l% i ...... * }& u- @9 L% M, u# H1 \/ @' U) ?
easc ' z) H7 B" e8 s, n. F' T
其中的“模式”可以是 *(任意字符), ?(任意单字符), [..](范围内任意字符)
' M6 R' w* t2 u“模式”中还可以是使用 | (比如 str1|str2 表示str1和str2都可以)
. K& N& m2 f5 @9 {, v3. for语句格式
6 _% P+ ~: I* g3 a for 变量名 in 列表 : K% G9 K7 _" G" Z
do
: ~" T/ J: z+ c/ R3 x 命令1 5 p( B, l! [& i# {& D
命令2 ...... 0 w" s b$ I5 w, z+ e
done
- c- L" A5 I' f0 h4 t4. until语句格式
: I" p$ t6 s0 ^. b( h2 t until 条件
) ]& D9 {" W8 I! g1 T& p 命令1 & B+ ?+ J$ M" R1 X' L
...... . b5 a5 Y5 n: ^* o# z
done % A, B2 q( D; z1 Y
一直执行至条件为真时才结束,至少执行一次
4 Z% v8 \, {9 Q' x5. while语句格式 $ X+ J( A5 F3 H( {3 e! B% p7 o
while 条件
3 A% m9 x& @/ `8 t- Z k 命令1
' a2 l4 @7 J P2 o; h ......
! Q. G7 Q* ]; ^( A& w1 s" y- J& r done " v1 k* p0 x3 ?8 ]7 |7 p
6. 利用IFS来改变读取内容的分隔符
0 r8 X, ?" x0 R N$ e" \& Q/ x7. 利用break和continue控制循环的执行 1 ?! W- w9 T" w
No.019 Shell函数1. shell函数格式 9 E% Q/ B/ B" b, }. l
函数名 ()
0 p' s% N+ x' A7 F0 M4 l5 w {
3 [: q# S& u2 i7 \& B 命令1
7 E1 t" a o* ^* } ......
- \9 q8 s2 ]0 ` } . }" p: p& u4 H8 c9 V5 b3 i
或者 8 V% x) b! R; Y8 \! D- ` f9 [3 Q; z
function 函数名 ()
4 z7 m1 b5 C6 I { 3 P% X2 A9 D+ s2 }" E" K/ ?
命令1 8 X: F- C; H# V
......
' _: ]' M3 b* b5 J% t7 O8 M } 3 t! w$ Z: w( ^. T5 j s# z: m$ L
2. 引用其他脚本中函数 . /pathname/funcfile (<点><空格><斜线><文件完整路径名>或者<点><空格><文件相对路径名>)
- O( Q' ~4 e% Z- q3 o* B* ~* F& b3. 函数中通过 $1, $2,......$9来获取参数
. f/ l9 I, M* d, g4 D% K- p2 B+ V7 A' XNo.020 向脚本传递参数1. 使用shift依次获取各个参数,比如
: D% n2 e# n, [7 d2 e while [ $# -ne 0 ]
. ]4 f% g( j1 g* i1 |7 n" r do 4 Z x4 [( T6 }/ F6 d- g
echo $1 # 通过shift,$1将依次表示各个参数
5 P& X' {! v# W7 w) k$ J' x shift $ o3 o& l0 M+ @6 |/ e
done ; k6 X2 m" L% [# [# N) V
2. getopts语法格式 getopts operation-string variable。 # ~; F9 L8 f1 e1 v
No.021 屏幕输出1. tput 控制屏幕上的字符输出,比如加粗字符,隐藏光标等等 $ l2 H8 l4 |9 f' p+ F3 x1 d
2. 改变字符颜色的方法,比如 , `% l3 m: U0 {; o/ `1 a0 f
echo "<CTRL-V><ESCAPE>[40;32m" 设置背景黑色(40), 字符绿色(32) 1 g# u3 N% V- t0 F
No.022 屏幕输入1. 输入时进行validation check 8 k: v1 A) T: c) D7 o' M8 b
“送进的是垃圾,出来的肯定是垃圾”
, H6 |/ `/ {0 W6 k5 x& y- l2 H5 vNo.023 调试脚本1. shell不会对错误进行精确定位,当shell打印错误后,需要观察报错的整个代码段 # S3 [, E8 x b( |
2. 在脚本中利用set命令辅助调试 ( N+ K8 h0 `8 D3 \: ?; ^8 }- v
set -n 读命令但不执行
9 Q. V% ~, S& [& \- Y% y set -v 显示读取的所有行 * v% ]/ k3 E/ W( c O* c% V" A
set -x 显示所有命令及参数 0 W+ h$ f3 |7 [0 E( e
- 表示打开; + 表示关闭;set +x 表示关闭显示所有命令及参数 0 U; F+ P4 U$ G: B5 z6 [
No.024 shell 嵌入命令1. set 命令在脚本中设置脚本的运行参数
- n. C, u# v ~' G0 R; d4 s$ q2. times命令打印shell消耗时间和运行命令消耗时间 ???
* `$ ]+ l; M( Q! K$ I3 A3. type 命令查询命令是否有效及命令类型
' A5 F6 f( @: ~3 T1 ]4. ulimit 命令设置运行在shell上的显示限制
7 I2 ?7 o! v- }! Q( v& ]# M+ Y. p5. wait 命令是父进程等待子进程完成 & h1 B( T0 d/ F% I3 e; ^6 L8 I
No.025 深入讨论<<1. 创建文本 ex. cat >> file <<end
" t% U" F7 q0 i0 |, |+ r > (输入内容) - T( A& R1 R3 @1 G2 P. I9 B$ U
> end
9 U# N' m% L2 N! D- L9 ^* e (输入内容)将被追加到file中 & p; A2 F& w/ W
No.026 shell工具1. 用日期做文件名,ex. $ Myfile=`date +%Y%m%d%H%M%S`
1 H, D9 f1 ^, X- t v, M $ touch $Myfile
4 H' E7 a* i- `2. 脚本中的临时文件名中加入进程号,可以保证文件名唯一,并在脚本结束时删掉文件
$ X( M9 u6 W1 Z ex. TmpFile1=/tmp/tempfile1.$$ 6 E" k" W( m$ A; h4 Z/ }8 M6 p
TmpFile2=/tmp/tempfile2.$$ h3 k% W5 _0 y4 F# C0 t/ p
rm /tmp/*.$$
8 P( w, n, r( J3 D( u8 A f. L3. 常用信号 : p+ Q2 K, T/ T% u2 i
信号 信号名 含义
G* Z; J' k. t 1 SIGHUP 挂起或父进程被杀死 4 d% w1 n" F& z: y
2 SIGINT 来自键盘的中断信号,通常是<CTRL-C> , k! c4 p, v6 [7 z2 M7 ~
3 SIGQUIT 从键盘退出
" `, V2 N7 f) c# ^$ m6 ] 9 SIGKILL 无条件终止 - y! w. G' q5 H2 o9 s7 r) {
11 SIGSEGV 段(内存)冲突 ; Z4 c1 S7 v) w% e7 i3 Z3 C
15 SIGTERM 软件终止(缺省杀进程信号) / b1 a& v8 v8 f1 S. I$ `$ V; b
4. trap 捕获信号 语法 trap "do-something" signal(s) / i* N' X! _7 j. d* z) N( x0 W2 T- L$ c
ex. trap "" 2 3 忽略信号2和信号3,用户不能终止该脚本 / }+ d4 a- D4 \" D4 i" b
trap "commands" 2 3 如果捕捉到信号2和信号3,就执行相应的commands - V+ h8 v' O2 Q7 \2 w
trap 2 3 复位信号2和3,用户可以终止该脚本 $ Q+ J, h0 m, `4 o0 n
5. eval 对变量进行2次扫描 比如:
; S8 s' Y/ v: G, k6 b [wangyb@localhost bash]$ VAR1="cat a.sh" % t e; T( B/ p8 r1 L8 a
[wangyb@localhost bash]$ echo $VAR1 6 U/ Z, x4 Z$ k4 [6 q
cat a.sh % m, j7 t o' ?5 L% `- N
[wangyb@localhost bash]$ eval echo $VAR1 5 x! `* ^ c( Z5 y6 P! j7 M! ]' ~
cat a.sh
$ Y3 |/ ~. C3 B" j0 @ [wangyb@localhost bash]$ eval $VAR1 9 x3 L2 U2 q* p4 K L$ v
#!/bin/bash
8 N( |/ ]6 _8 c/ h5 H' K: Z7 M- }7 H TMP='HELLO'
( \5 O3 M) I( c: { sleep 2 0 Q% f( v! x7 e+ `$ K
times
8 \2 E' }: c% b' Q6. 获取命令行的最后一个参数: ex. $(eval echo \$$#)
# C8 ^9 X8 |6 a, q7. logger 命令记录日志
2 K" ~+ ?& b+ `( z; h! Q( s* ]: nNo.027 几个脚本例子# 作者常用的几个脚本 No.028 运行级别脚本1. 确定当前的运行级别:who -r
' U- _0 u7 G! C& }) [7 `# s& D2. 运行级别含义
( X* y; ]. N! G* V* x 运行级别0 启动和停止整个系统
2 g0 y; K g( Z 运行级别1 单用户或管理模式 % B+ a' \# F5 J/ g
运行级别2 多用户模式;部分网络服务被启动。
; I8 F: h' |; k* n2 m" F/ R 运行级别3 正常操作运行模式,启动所有的网络服务
; K( G2 T% P6 k8 P8 |: P/ d 运行级别4 用户定义的模式,可以使用该级别来定制所需要运行的服务
& S0 d* z* J& o1 T$ ^/ i; |# t& z 运行级别5 有些Unix操作系统变体叫起作为缺省X-windows模式 " ~ O, ~0 I7 M7 `6 v' i. I& _ D
运行级别6 重启动
7 }% ~. _+ r" I% N RNo.029 cgi脚本# 感觉现在应该不会有人用bash来开发web程序了吧 No.030 常用shell命令1. basename : basename path f) H3 n* Q* Z
2. cat : cat optiones file
, \7 P* x# _+ k0 r3 W1 v$ C$ ^ -v 显示控制字符 + [. M: z# I2 }# x; f
3. compress : compress options files
" R r+ l5 M3 T. I -v 显示压缩结果 - \7 d# |3 g- {. Z) g
4. cp : cp options file1 file2 ( e6 W- G* ]* Z' ^
-i 覆盖文件之前提示用户确认
7 h* y$ t, F D) P( ?) P) ~# p -p 保留权限模式和更改时间
5 D7 u, Q7 V9 h+ z; R! H2 S% Q) U -r 拷贝相应的目录及其子目录
Y! r2 q$ L9 I5. diff : diff options file1 file2
# i6 K+ a/ V2 O9 c" \$ [2 k& [ -c 按照标准个数输出 # ?5 s/ Y' D, P
-I 忽略大小写 7 ~) v* \' t+ I, I
6. dircmp : dircmp options directory1 directory2
P+ E+ n, ?- T) T" c! u -s 不显示相同的文件 9 r0 R' O, A3 @. l3 P1 Q3 S
7. dirname : dirname pathname 1 {- K5 K: f2 @' f' |* x' o! O( N% ?
8. du : du options directory 1 ~, G0 G/ _ l7 V, k0 {
-a 显示每个文件的大小,不仅是整个目录所占用的空间
3 z4 p! c* F/ }8 h2 y$ r -s 只显示总计 + u" K' m9 |/ J: c. X
9. file : file filename
- |$ P* j% F. Y0 S: E0 P& c10. fuser : fuser options file
1 X5 z# {. S1 S& t# G4 _' X -k 杀死所有访问该文件或文件系统的进程
1 ~& @. d1 R1 ?6 y' C -u 显示访问该文件或文件系统的进程
( ?3 k3 H' w7 N9 `& m11. head : head -number files ' S: l2 U6 [' S. k3 J1 a# g0 F* A
12. logname : logname (显示当前使用的登陆用户名)
- k: @6 S3 i; a& r13. mkdir : mkdir options directory * x" G" t3 M! s$ h0 K; S8 `* K0 P
-m 在创建目录时按照该选项的值设置访问权限 _( H7 V, J5 G7 V' p6 `
14. more : more options files
! O. m" R: R( J6 X# ^# ~* B -c 不滚屏,而是通过覆盖来换页
5 r! }3 v- C. F0 _9 [- ` -d 在分页处显示提示 1 i# j+ y$ J. ?" U
-n 每屏显示n行 / {3 O3 e. R3 }. H- [
15. nl : nl options file
* Q( V$ L) ?1 E9 D7 r* `' W -I 行号每次增加n;缺省为1 ) v2 H1 m9 {: M: B
-p 在新的一页不重新计数
/ q' s: p4 }4 z( {" }16. printf : printf format arguments
6 d! |5 C$ x% V) x% Z# @17. pwd : pwd
- u6 u7 j. u U6 z9 ?2 q2 h18. rm : rm options files
3 d+ e+ T. j* K! c+ J. f* b -i 在删除文件之前给出提示(安全模式) 8 Z' |9 x$ x# U; H$ }# _% |* L7 E$ z
-r 删除目录 . t- W: l' f, `& t, A
19. rmdir : rmdir options directory
; U; b3 W6 [/ C; D9 K1 m& v1 U( }, ` -p 如果相应的目录为空目录,则删除该目录
; U" h. K# P! Y0 C) J/ p6 k20. script : script option file " S% r) E5 ~# x, Q/ J
-a 将输出附加在文件末尾
; W, V0 U# K, `$ ]21. shutdown : shutdown now ; G# W6 z n+ Z2 C% i- s
22. sleep : sleep number(秒数)
" w7 w+ k# o+ k: g23. strings : strings filename (查看二进制文件中的文本) 4 h5 e. }. E0 A$ W
24. touch : touch options filename 3 ~% a5 f3 g F, O
-t MMDDhhmm 创建一个具有相应月,日,时分时间戳的文件 8 ?& _7 X0 A: M K8 h. n
25. tty : tty 显示所连接的设备或终端 3 f. S* J% C0 N3 ?8 l J# C
26. uname : uname options
. L* |( ^; x9 ~. _, x -a 显示所有信息 / z# U$ Y+ ^% e# d# }3 k
-s 系统名
. a2 o0 ]5 S7 n9 x; q2 d3 g" ~ -v 只显示操作系统版本或其发布日期 - U- e8 _) H/ `6 n
27. uncompress : uncompress files
8 Y0 ~( ? k/ Z7 i28. wait : wait processID & |, N, L, O( h5 S+ {7 [4 u
29. wc : wc options files 6 p3 n4 C+ A' a8 S) h) Y
-c 显示字符数
, h3 c% c5 ^# |" M( ] -l 显示行数
9 |, L9 t# Q4 U% _1 y9 Y& g -w 显示单词数
. Q1 x8 y7 Q! I1 _( u30. whereis : whereis command_name
; G W p$ K2 M7 {& {31. who : who options ) ?8 H6 z8 S( T$ O# W, F, v
-a 显示所有的结果
7 N4 }; y) v5 L a2 _ -r 显示当前的运行级别
$ \! O, T. q7 d, w& ]0 H0 K3 ~4 t$ H -s 列出用户名及时间域
" f: A; S! I. ]7 | |