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