EDA365电子论坛网

标题: 认识一下shell [打印本页]

作者: thinkfunny    时间: 2020-1-2 11:16
标题: 认识一下shell
) i7 v" P  I$ z7 c  w. V
引言
. {$ N) H- x" l; U& b
shell,我们经常会用到,以其强大的功能,会帮助我们解决很多棘手的问题。最近遇到一个问题,要跑很多case,如果串行的执行,需要很久。能不能让他们并行起来,但又不能所有case都并行运行呢?,因为所有case同时运行,机器会挂掉的。1 T  u7 W1 C! Y( Z1 q
0 m7 M. M# n5 m) k1 b' e$ k! T- C
1,方式1
) t' m! T5 l* }" y比较直接的一种方式是,维护两个文件队列(*.start和*.stop)分别记录所有case的运行状态,然后根据并发数量来获取和分配资源。- Z0 P- q' y8 G4 S
' S  N: B' U/ T4 X3 e
代码如下:$ \4 c) k& X2 u) j2 k# v
3 {7 y' J9 U0 u8 \: y" K
multi.sh:
' T0 j+ o% W9 p( b
1 l# h! B; y1 o+ T6 r; J% U6 j  j! t7 u0 G1 q8 I2 P
需要注意的是采用这种方式的话,需要获得每个case的结束状态,这个可以通过case运行结束时的输出log中分析得到。
8 a' H! _4 d# v虽然有awk等强大的工具,但是,分析获得不同case的结束信息仍然是一项艰巨的任务。7 e4 R" _" F; r# m& I( b! h, B
: P/ B7 t) o$ F& I
有没有其他的方式呢?% Q5 H, F. w$ K- @8 N: U
  @2 F+ S; _1 Q5 J$ j0 z
有。
  B& t' v, h2 h  o0 `8 V: A, d9 A* I8 c# ^) X* w3 @' m
7 g$ n6 x' o: p1 {* g! `5 Q% }
2,方式2; x, Z4 U5 ?# }# B
仔细分析所有的cases开始,结束的情景,发现和fifo文件的特性很类似,于是就想到用fifo来实现并发控制。8 z* m4 k/ e9 Z) I4 U" b# G
! R) C6 j: n5 l) F4 x/ m/ a/ g
如下:
* Q  w: \* J" k
( y0 E- w! @# z8 h. G: ~, E$ D3 @multi.sh:* M* e( K* [- E1 t
( u5 F0 R0 j. P% m  F$ Q2 G

# g" Y  r% g' ]7 M; R  l* R
$ h7 @/ p1 i8 d) S  W1 g" H- t从中可以发现,我们不需要再为获得case的结束状态而烦恼了。
% A# W: _" N2 S. C7 b+ f
$ {- q" I( s$ w( d. o. \下面是运行结果,一共15个case,每个case运行1秒,并发数量设置为3,所有case运行完需要6.4秒左右。2 X% ^+ E5 z( I2 k, Q0 `: c& R
1 y" ~% {1 ]2 X! Z$ Q
0 K1 S. f$ B8 n" U+ J" T" R- ?
1 j8 q; N+ {$ p) i. n" L$ _. a
3,shell参数传递9 ]  R7 E9 o$ y4 A  C5 L, {
0 X! j/ a, y5 [0 {- c) k" Z
  q" }: g4 q5 ^
平时我们在使用shell脚本时,往往要向脚本中指定参数,这些参数可以直接写在命令行的后面,但是这样做对参数顺序要求很强,使用起来比较困难。
( W( n7 B, j1 [2 H) W* H9 A/ F  l9 m- E7 g! ~
这时我们可以通过在参数前面增加标示来实现。4 t; p. `( t+ D
# _$ W! z8 A* y
      
3 l$ w$ a+ N4 I5 ^: b+ _8 y3 ~; k( S5 n8 F- N1 @
验证结果:
. H* l1 |8 O% T7 ]
: [' m1 S! }( F+ ? & E2 k8 _& v* m

# r' |& }- ?; h$ v) X0 g; F% J
6 j: u5 j! s. _' X& ~* @. j4,小结: \7 A# E* z) W1 |6 A
; E/ k* N. }( P0 r; q
shell很久都不用了,本小结就当“朝花夕拾”吧。3 k& Z  L/ ]* |4 u9 k  k# K

* S% }8 R' H: w, N5 `5 W
" G, b8 l' t! \2 [
作者: yin123    时间: 2020-1-2 18:44
之前接触过,没有深究




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2