打印

[转帖] 常用脚本命令集

常用脚本命令集

引用:
如何用脚本实现分割文件% \1 |( o5 b! [+ p8 ]
; K: v: m" _6 X% L1 V. {% |6 r% i$ Q
CODE: #!/bin/bash0 P9 n7 i( [% H7 X1 O- g

" j) M4 d+ J' _9 x2 [5 Gif [ $# -ne 2 ]; then
. s3 r: f2 o; P: A9 R1 V echo 'Usage: split file size(in bytes)', K: O* p0 {" v0 m
exit
. T# ^- X7 r$ a. d3 B: afi. f2 @2 p7 d( X! K/ W

" z6 b4 r( z3 _7 h# Qfile=$1
. O2 } p/ G3 _$ usize=$2' l# {1 [! p9 g a/ M' c S
3 w( q) u: i0 M# `' B( j
if [ ! -f $file ]; then
5 \' v9 N- h& C h- J1 E echo "$file doesn't exist"
! T1 _0 q. F5 p" D7 u exit
R9 J. p- {, @, [3 b+ a% m5 J4 ifi
# x9 F! W+ f' Y! p$ v# f
5 I0 }; y6 \; a2 b4 y* e#TODO: test if $size is a valid integer
( M1 L) [% f, x: W9 Q$ [- d- x6 {
filesize=`/bin/ls -l $file | awk '{print $5}'`
" _$ \/ Y. v4 ]9 w- E6 P( W0 r& I3 d7 vecho filesize: $filesize
9 q% J6 W+ }+ c5 N
! `2 v" g* y2 \1 d* m5 ]& Jlet pieces=$filesize/$size
5 `! v& y& [" X+ O7 r4 X" slet remain=$filesize-$pieces*$size# x+ E; m) j$ Y: `9 P# I
if [ $remain -gt 0 ]; then
: P' ]0 O5 D X5 P let pieces=$pieces+14 `; u, L- d8 j" A5 h
fi# Y6 I: P) ^7 D. E* x. N( z+ I
echo pieces: $pieces
8 s# N4 E1 Y! I+ v7 v3 N2 W
: v+ D8 G9 B8 w5 E5 V0 P" ]i=0; s+ \; H0 e6 V( I. b1 Y! u
while [ $i -lt $pieces ];% U1 l5 O3 ^* g C# r
do
/ B7 |3 {' b B* G* N! U echo split: $file.$i:
$ E; _7 ~9 x6 ~# @+ f, G dd if=$file of=$file.$i bs=$size count=1 skip=$i, A( [. |6 ?& u9 Q7 g
let i=$i+16 h7 N5 a' l/ M0 v
done% [) H$ {* \; a% V: t' q
: b4 v. v9 ^7 W7 l2 S8 _% R
echo "#!/bin/bash" >; merge
4 s2 l. o) n$ m' t% c4 k/ C/ D7 F. Z! \/ R
echo "i=0" >;>; merge" u0 K1 r4 {4 ~; J
echo "while [ $i -lt $pieces ];" >;>; merge
2 S/ G' J! h4 X( x1 T4 Wecho "do" >;>; merge
" _( j4 B1 J b# uecho " echo merge: $file.$i" >;>; merge
8 K1 c7 l" |; V& Oecho " if [ ! -f $file.$i ]; then" >;>; merge
9 [ A1 i! _8 p2 D! zecho " echo merge: $file.$i missed" >;>; merge
$ A/ s4 {% j9 ^8 u. hecho " rm -f $file.merged" >;>; merge; J+ n: g( W8 c6 ~
echo " exit" >;>; merge
6 l5 t; _3 J: @3 L) ?: Vecho " fi" >;>; merge, |2 ?" u+ J0 ]& S5 d3 m6 a" k
echo " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >;>; merge+ P, z" t$ k- Y; w
echo " let i=$i+1" >;>; merge1 J# u2 P, Z8 j7 n
echo "done" >;>; merge
$ x6 [% z. B. o& uchmod u+x merge'
$ A4 f1 k7 V* ]9 c `3 S( a
) v- ` t4 w( l' S如何查找日期为某一天的文件
# c+ v+ m3 M: G3 S8 o! H: [/ g# @* u: R' ~

- K, d/ Q8 ?$ P8 l& c4 \$ A2 vCODE: #!/bin/sh 4 U+ A7 \2 d/ i8 w% l/ v0 i; |3 g
# The right of usage, distribution and modification is here by granted by the author. 0 Q2 S9 a+ h9 K( [* a
# The author deny any responsibilities and liabilities related to the code. 7 Q# S* L8 y' ^* U f! o: [/ M
#
, S3 [/ n! d5 S: m& W8 x1 mOK=0
7 Z3 d" {7 X) dA=`find $1 -print`
$ z$ K* A0 [9 ?* r6 s% y# G; k0 ]if expr $3 == 1 >;/dev/null ; then M=Jan ; OK=1 ; fi
8 g; [$ r* M9 ]) ?- J3 K* Pif expr $3 == 2 >;/dev/null ; then M=Feb ; OK=1 ; fi " o! ]8 A$ \7 ^8 E c
if expr $3 == 3 >;/dev/null ; then M=Mar ; OK=1 ; fi ; {: q4 Y, _2 z& W6 k( q
if expr $3 == 4 >;/dev/null ; then M=Apr ; OK=1 ; fi
, X6 C. h, r" h# iif expr $3 == 5 >;/dev/null ; then M=May ; OK=1 ; fi " S+ ?3 Q3 m, B9 ]
if expr $3 == 6 >;/dev/null ; then M=Jun ; OK=1 ; fi
8 Q* ]0 M- L3 h) |# m' tif expr $3 == 7 >;/dev/null ; then M=Jul ; OK=1 ; fi 1 D0 ?) a3 x, k9 h: \, X& x
if expr $3 == 8 >;/dev/null ; then M=Aug ; OK=1 ; fi
2 T2 l% V7 W. i% S# W: xif expr $3 == 9 >;/dev/null ; then M=Sep ; OK=1 ; fi
9 x! B3 Y8 e: m- s& m6 `" F; y' X uif expr $3 == 10 >;/dev/null ; then M=Oct ; OK=1 ; fi
$ m0 Z, u T5 c! xif expr $3 == 11 >;/dev/null ; then M=Nov ; OK=1 ; fi
( a% Y' U9 P. y5 W* @if expr $3 == 12 >;/dev/null ; then M=Dec ; OK=1 ; fi
5 _ L3 j% w2 ]8 j [if expr $3 == 1 >;/dev/null ; then M=Jan ; OK=1 ; fi
( I) L8 z1 I1 M5 j4 Dif expr $OK == 1 >; /dev/null ; then
$ }; B7 e1 }: v1 i Qls -l --full-time $A 2>;/dev/null | grep "$M $4" | grep $2 ;
! ]( j H* g0 k, ^else
) C8 t2 r! ]; p: q2 K5 K! iecho Usage: $0 path Year Month Day;
/ k# ?/ m, J) t8 T% o* U- \echo Example: $0 ~ 1998 6 30; ( @6 C8 ^6 i6 X' m6 Z
fi ; u6 o7 w; s) {, t; q3 a; e# c
如何计算当前目录下的文件数和目录数
) c* @' ]4 K- A/ d ~4 m1 y* I z- Q b; n8 \" ]" a

, o/ h! p; `( \2 ]- Z7 C1 pCODE: # ls -l * |grep "^-"|wc -l ---- to count files
+ B: x5 I- T$ J1 a: J( O# ls -l * |grep "^d"|wc -l ----- to count dir 8 q' `# l1 e$ r- J8 e$ [6 [! O
4 W6 L/ B) n( N8 m8 H( y: q
如何只列子目录?2 |2 c$ f* s w7 z

! R' B$ M9 L: E7 i3 u$ m# @3 PCODE: ls -F | grep /$ 或者 alias sub = "ls -F | grep /$"(linux)
8 ?7 _2 R6 I* a/ d9 _! f2 s0 ^+ V" A6 Q; |/ P6 }
ls -l | grep "^d" 或者 ls -lL | grep "^d" (Solaris)4 g! d' J- V0 [

& i B, H: V& G如何实现取出文件中特定的行内容' g) V; K" k" C/ |& R6 |2 u

4 R' k( q: s; |& D* \
0 h J7 R: Z8 C! K s6 KCODE: 如果你只想看文件的前5行,可以使用head命令,& U; q5 I( [( `+ `- f& K; f8 B0 [
如: head -5 /etc/passwd
/ D# W' B2 n( b
# N1 ?! t$ |$ `如果你想查看文件的后10行,可以使用tail命令,6 s' ?0 Y N! Q8 B* D
如: tail -10 /etc/passwd
# S" W% ]5 E% K4 Z& ]7 H2 h; s. k7 f: Q; x/ d" l7 R$ M B
你知道怎么查看文件中间一段吗?你可以使用sed命令
0 s1 x- k, @% n4 C8 N如: sed -n '5,10p' /etc/passwd 这样你就可以只查看文件的第5行到第10行。
! M- c( T. x( H' L% `
! r/ G# x1 u' U9 \4 J4 \如何查找含特定字符串的文件
1 Y' T4 i+ |2 _9 N4 g& Z
$ o" D0 |8 y& \; R* h. n, w& b: f$ G {3 N7 ?
CODE: 例如查找当前目录下含有"the string you want find..."字符串的文件:
- M3 m' J9 k! Q( y* `" d$find . -type f -exec grep “the string you want find...” {} ; -print
6 h/ I" B) k4 f3 G2 Z( R5 q* m0 p. O8 U$ @3 Y
如何列出目录树
7 y( v% X$ }: W3 ~8 Y: h' m
! |9 M* |2 A8 a" W9 T' ~; uCODE: 下面的短小的shell程序可以列出目录树, 充分利用了sed强大的模式匹配能力.
. `# m6 ?* a+ j1 V) F目录树形式如下:
( h- G) E9 }2 l+ K. 2 }/ H0 h/ R% D; R3 i$ \" G- X
`----shellp
% K7 O8 k% @# H5 _`----updates / _7 F8 J: ~$ _" p4 {4 t
`----wu-ftpd-2.4
. m* @3 x8 l/ U| `----doc # n; J9 o! h* k- w3 D
| | `----examples
% V. N/ Q" a3 u& s, \ K5 ]| `----src ! s1 _% r% @4 ^6 ^% y
| | `----config - M' e$ K2 p2 y: x
| | `----makefiles
7 L' V5 I8 j3 a- E3 E| `----support
+ ~+ C+ {7 N+ g+ h, D| | `----makefiles
: p& }3 j8 ~- R! \4 Q- F4 l| | `----man
0 J& w+ H" \! F8 Z a+ N| `----util
' ~" P' a- I. W9 n4 Y( J$ F7 t0 z脚本如下:% N2 d! E( Y* v2 p
#!/bin/sh 6 l1 D8 ]$ _9 _2 o. Z
# dtree: Usage: dtree [any directory]
. _; M* c, n) p( x- v& g! adir=${1:-.}
. s) G. K# |- q( {(cd $dir; pwd) % Y& M0 v! o" _" w( g
find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g"
$ a3 X" b2 L2 X5 Q
1 m' d; z/ V8 n" n7 f% u如何实现取出文件中特定的列内容9 n, m* Q) N: H& d0 e2 |

# n M+ h/ I4 P/ w7 e( l
1 @' O+ q& {% { {CODE: 我们经常会遇到需要取出分字段的文件的某些特定字段,例如/etc/password就是通过“:”分隔各个字段的。可以通过cut命令来实现。例如,我们希望将系统账号名保存到特定的文件,就可以:# `$ F/ O8 K: k
cut -d: -f 1 /etc/passwd >; /tmp/users
2 [4 O0 u7 _' `6 R% d/ `-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段。6 l5 f- F8 R; h# Z' Z" J4 @# K
当然也可以通过cut取得文件中每行中特定的几个字符,例如:
8 n6 F: E# Q1 U, T3 M$ y! wcut -c3-5 /etc/passwd
; V- [5 X6 d% Y就是输出/etc/passwd文件中每行的第三到第五个字符。
2 ~( h4 c: r7 e. m$ @" T: I-c 和 -f 参数可以跟以下子参数:
$ V- Y2 y8 C1 t1 g$ C, P+ PN 第N个字符或字段
! e$ `$ [) t8 F/ XN- 从第一个字符或字段到文件结束
' W r1 C% K$ N9 x8 w) d1 P/ DN-M 从第N个到第M个字符或字段
N- n3 K& c7 ]5 \ T4 c% X-M 从第一个到第N个字符或字段
2 u8 d7 `, `: y4 e1 s, a+ e
1 r$ V+ Z* F0 ?9 F) j' \在vim中实现批量加密
+ ^3 w- R: W' S- V( N8 b* }3 y3 |1 B4 o: t6 E: d
8 k2 n: j# { [ P0 L
CODE: 密码中还是不能带空格,不管了,能加密就好,先这么用着。 o; Y, a5 F0 K' c7 f6 d

2 B* ]. J2 a( x' y============================================================
+ t W7 u+ a! l. a6 F#!/bin/bash
/ L N& L$ C+ b& U# Encrypt file with vim
) `3 K- c$ F' s/ u/ F% ^# e6 h9 ?" v& i/ |8 }
if (test $# -lt 2) then; \. ^7 {) q h. N
echo Usage: decrypt password filename- M9 X1 s3 E0 y. O% [- M5 `: j
else
$ h% V) @$ U9 ?! W* X! N vim -e -s -c ":set key=$1" -c ':wq' $2" K9 ~8 t. G4 e- C% B, f$ z' Q
echo "$2 encrypted."
' d" e9 ]* m+ H( t3 s. ]) N% Pfi
1 z# r& v8 B$ E( @7 G$ [# d8 i============================================================
6 f9 s! t5 ?2 K* r! D ^4 I$ R! X. F2 ]) p[weeder@SMTH weeder]$ for file in *.txt ; do encrypt test $file ; done
1 a1 m) o. t$ ^1 Ytest2.txt encrypted.
. j- H- ]9 k% o# n0 A& h% ~test4.txt encrypted.: |" c' y& S. N. ]+ m- ^
test9.txt encrypted.
- S% t. I6 X+ ~+ c9 P8 dkick.txt encrypted.
- f4 a/ ?3 Q" A0 G" \7 R echo "$2 encrypted."1 O5 c* r( X5 T4 K
fi/ @* @! k9 ^% f+ k9 a
[weeder@SMTH weeder]$ for file in *.txt ; do encrypt test $file ; done
+ F% k% c" C6 o$ J6 K8 c+ j7 @test2.txt encrypted.
2 M5 ?! X9 V6 Q; L& N+ ztest4.txt encrypted.# R) D2 M& }7 o- x4 u$ r: f2 y; F
test9.txt encrypted.
9 B% Z5 L8 }: N2 v( fkick.txt encrypted.# T, _/ \* h8 n* ]
too_old.txt encrypted.
: O) m( y6 @! M5 ]1 otoo_old_again.txt encrypted.0 c' c- ?! F6 q {9 p9 Z
bg5.txt encrypted.3 C$ u& y9 {4 v9 d) I* T# ~7 f
[weeder@SMTH weeder]$
3 P; [4 D E' ^5 {' T! c
% ]( ]7 d" ]6 h, t4 g0 X$@等特定shell变量的含义4 m/ x+ \6 I$ o' L8 E2 ~: U

4 g) [% \5 L9 [, P7 U
3 _* S6 @. l* G: uCODE: 在shell脚本的实际编写中,有一些特殊的变量十分有用:: }1 U6 B x) `
$# 传递到脚本的参数个数
: S' A5 C& L* K2 K+ }
5 ]4 m! ]- w' N$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个: d' ^ b I/ s; H8 ?. K7 G, x: y# A

, y4 X6 }& `5 p6 W4 o$$ 脚本运行的当前进程ID号
, a- s3 `/ f7 |3 H% ]' r5 x- d8 s! l
$! 后台运行的最后一个进程的进程ID号0 j# b& [" L u) J3 F8 I" W& k
) B4 L% ]( t5 ^0 ~1 L I0 c7 i; a( r% R
$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数, R2 h4 Z9 d, t1 e" m

1 H& _" n, `2 Q$- 显示shell使用的当前选项,与set命令功能相同4 Z5 h A0 O# n

/ p3 j; T) |; ?1 W p* L; F$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。" F, {2 U1 ~) n* ]

- o2 O8 L1 j' z% l5 V1 ]如何使程序的执行结果同时定向到屏幕和文件
' F9 m. E: Z3 F) ?
D& T! d h9 ~2 ]1 L2 C0 e \/ {2 ^8 Q2 \& e. V1 d
CODE: program_name |tee logfile
- {/ p1 X! v, [% H; n这样程序执行期间的显示都记录到logfile同时显示到标准输出(屏幕)。
/ R, t& @" j i8 N6 s6 {2 W1 h, n& ?, p @% b8 h7 F: O
如何用sendmail给系统所有用户送信: x, Q3 l. n5 ~$ e) Y$ _$ {8 s0 E- L

, i$ O9 t7 s+ y$ w: s; c1 f3 J' D; B$ _4 Y0 Q# G1 W+ O9 w' l- k
CODE: 首先在aliases文件里面建立一个alias:
+ n2 [* z/ F$ T+ U8 palluser: :include:/etc/mail/allusers
: T1 X. J+ X3 M6 h$ n5 L并执行newaliases使之生效,然后在/etc/mail/allusers里面列出所有用户,可以使用下面的命令:( Z7 H' ^; m$ B& s# e
awk -F: '$3 >; 100 { print $1 }' /etc/passwd >; /etc/mail/allusers* m% y+ Q; G- j
$ ^' k1 B9 v. s
如何查找某条命令的相关库文件
: W. v( s' j0 ^
9 A5 p: S8 S2 m0 S/ T1 ?8 E' H9 e z2 a0 |+ S
CODE: 在制作自己的发行版时经常需要判断某条命令需要哪些库文件的支持,以确保指定的命令在独立的系统内可以可靠的运行。: Q' J) u8 y7 [$ m8 f( |
Linux环境下通过ldd命令即可实现,在控制台执行:) V1 A. L* P, ^; n" h! r
ldd /bin/ls
+ ^; A9 d* W( a) T! q即可得到/bin/ls命令的相关库文件列表。
2 t- W+ m( Q& i- `6 l! G& F1 v% d4 r0 N0 s6 M
如何使用host命令获得更多信息1 T: k) C0 v1 ^7 c& ^3 G) i

4 f% Q/ t8 G" c
' C/ y: s" i# } J. Z* X' ^CODE: Host能够用来查询域名,然而它可以得到更多的信息。host -t mx linux.com可以查询出Linux.com的MX记录,以及处理Mail的Host的名字。Host -l linux.com会返回所有注册在linux.com下的域名。host -a linux.com则会显示这个主机的所有域名信息。 ! @8 U4 K- i$ c2 U0 ?9 A

+ S* U4 i: F! k! c2 P! t& P如何停止终端多个进程
; Z0 B$ m0 }6 T7 o
3 ~ [: }9 K" w: l6 l* a. L7 O/ R5 L
* s: @: \" D6 q: {CODE: 以下是脚本:+ Q8 ]" z* f3 l2 a/ u+ U: Y. q% Y7 V; ^
echo "系统当前用户"' w t9 a2 w3 V2 ~7 g- V2 a
echo "---------------"2 G' D9 _9 b& w& ]
who | awk '{print $2}'
" a) n' i( i/ u a! a" techo "---------------"3 k4 |6 G3 n) ~% X
echo "输入要杀死终端的终端号:"2 ]2 L- V6 u+ N) b
read $TTY
( ~5 J) S3 S C+ P6 D) W) v+ okill -9 ${K}=`ps -t $TTY | grep [0-9] | awk '{print $1}'`

宜兴安利店铺当天免费送货
电话:13961561512 郑合清
欢迎大家光临:
菊花论坛 靓图共赏

TOP

月月是第一个把linux脚本共享给我们的人
云烟缈缈几层间,万水千山显世间,梅兰竹菊朦胧伴,英才陪书与昼夜。
欢迎骚扰:kenknigh@hotmail.com                

TOP

本区多了一个第一哦!
《无量寿经·第十八愿》言:
设我得佛,十方众生,至心信乐,欲生我国,乃至十念,若不生者,不取正觉。唯除五逆,诽谤正法。

TOP