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