shell 实例

1. 写一个脚本,利用循环计算10的阶乘

#!/bin/sh

;@)Z}‑GJ‑C:mp
i!md0

 

a8J9oK2[0B%S,kC%b;k0

factorial=1

;BV1Q TV!A)D0

 itlab博客1i_‑P0w7JT{

for a in `seq 1 10`
3R9r5@ ?y#o0

y,[3Mb


 

 

u~s;J.o w~0

 

 

do

d,R0Ww*Dv;s0

       factorial=`expr $factorial /* $a`itlab博客8cc g gf7b6w;BA


 


 

 

doneitlab博客 C,M6H,N
{9U

 itlab博客3K [5]P`a*EK

echo "10! = $factorial"

:fLd


 

 

CA0

 

 


%b:Y)cC:`E5b&D%i(~0itlab
博客"B5]$N.AG w‑H d x#r


 

 

注:上面有一行,for a in `seq 1 10`,其中seq 1 10 , 即列出现110之间所有的数字,这一行也可改为:for a in "1 2 3 4 5 6 7 8 9 10"itlab博客tq1e Fwc O;/x

5^


 

 

V:L‑A1o0

 

 

2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然itlab博客 @5r[1]m$p ?v
后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。


 


 

 

#!/bin/shitlab博客|%m2zJ2Z|(mw9E8J1~

 itlab博客/b8h6d,Ou_

unset var

`4O$Nf u[1]@0

 itlab博客EPM+VS8xbG2l

while [  "$var" != "end" ]

'a+U u;L B;{!/0F4D0

do

%MqVNk0

     echo -n "please input a number: "itlab博客W'J2}'b1R/Q­O J

     read varitlab博客;j;u_n5c RIK
n'p/a

     if [ "$var" = "end" ]

WxlCV‑@0

     then

0H8wI&Vl/vf-I+X%yv0

         breakitlab博客!/2],N.EX V

     fiitlab博客+}`0P Z7jYK-|"~g

     echo "var is $var"itlab博客-oz4Z`'H"^y{

done

_FF‑F K,?1K'[/v0

 itlab博客8}3rC] aM2m^[1]p

3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和itlab博客[1]e9erI?Cy.p ~;`

#!/bin/shitlab博客 {3FLzH3j[1]n

 

n


 

 

Z|vwp0

 

 

sum=0itlab博客i` l:b%B

for a in `seq 1 100`itlab博客j4I[1][`J-tJt*V

doitlab博客%bV IF&f{{


 

 

     if [ `expr $a % 3` -ne 0 ]itlab博客9c"h+k /YW0c


 

 

     then

"_?O%b&]d0

          continueitlab博客
b,_
X;aB@

     fiitlab博客6@ H‑y/m^:S&|? r


 

 

     echo $a

IBq6jM&n7|0

     sum=`expr $sum + $a`itlab博客y7Wl
qB.U U3}

doneitlab博客y+/0L-q U b[1]?'U k;I


 

 

 itlab博客 HPWY9M;u X D3C8/


 

 

echo "sum = $sum"

M:`8e0rr O(A)`tK0

注:

比较操作:

     -eq 相等

     -ge
大于等于

     -le
小于等于

     -ne
不等于

     -gt
大于

     -lt
小于

itlab博客 k4J|h5~ m

4.一个函数,利用shift计算所有参数乘积,假设参数均为整数itlab博客2~ GSU"c?H Y2[
itlab博客­T A:O3w[qS


 

 

#! /bin/sh

W[1]Z^­kr0

 itlab博客1k+nB5K6Hp+M#A+/

result=1

M``~;nJ ow8L0

while [ $# -gt 0 ]


u[1]r1u+n7M*c /0

do

,H`r;m2j/~ooKn0

     result=`expr $result /* $1`itlab博客 {4OF^‑B j"EY


 

 

     shift

Y/5~v#H,A4C0

done

CAdO9S%jd0

echo $result

"piP}$C"c p#^0

 注:

   非常有用的 Unix 命令:shift。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当 Shell 程序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1 后为 $2, $2 后面为 $3 等。在 shift 命令执行前变量 $1 的值在 shift 命令执行后就不可用了。

$#参数个数

 

g­P;H w'Q]MM0

5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gztar.bz2文件。

#!/bin/sh

)u&w#f


 

 

@0@0

 

 

 

gyRk%f$k:j,Z p g


 

 

V0

 

 

case ${1##*.tar.} in itlab博客Z%VG*R/I$iu*O

     bz2)

v1jq iB0

         tar jxvf $1itlab博客[1]t8}c3[.BS‑U

         ;;itlab博客8[-M H4g(S

     gz)

6m3Or:[P g`0

         tar zxvf $1itlab博客'TIk$C‑J j­hu9@

         ;;

`;p[1]}p-J O T0


 

 

     *)itlab博客Q8Zz­A,M6VEA

         echo "wrong file type"itlab博客 ?A9S'h6~`K*q [


 

 

esacitlab博客N)W#kz.J0P!tY!J NZ

 

HO#^ X x


 

 

~0

 

 

6.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如
K5hL$y,l b0文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,
1D+/Q


 

 

b4_/z0包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。

#!/bin/shitlab博客;CV VJ Nh#q


 

 

RPM=/bin/rpmitlab博客4Lj­xeJ[1]c:_­v;`G

option="-q"itlab博客iI'f
|3Hl h g

 itlab博客2nY.J[1]I;l
x.r

while trueitlab博客3lU W0IqW


 

 

doitlab博客‑|?0bT r%[-Up7J_Kt5`


 

 

       echo "what to query?"

)c~ {1_^2l!k0

       select var in  "All" "file" "package name"

]:k)[U!i)pO0

       do

,W~a8Z
YJ:I0

              case $var initlab博客7@5c8a VQ+qv:A

              All)

+P
E Pl&N‑/,d0

                     option=$option"a"itlab博客)b&mY h]D

                     break

7S


 

 

awI)I3J@T!X0

 

 

                     ;;

"g3o'qNej X0

              file)itlab博客~ R g0d'ww

                     echo -n "please input file name: "itlab博客DX t_q:S,`P

                     option=$option"f"

^.c;/a$BJ
B/YA0

                     read argument

K2^/8Tb%M-U.q0


 

 

                     breakitlab博客*L6i2Y-x0J6[]1L

                     ;;itlab博客&|&S0Ya[1]fkY /K

              package/ name)

g /C~M5Z3u!L0

                     echo -n "please input package name: "itlab博客/qh9F
^3?H Xz


 

 

                     read argumentitlab博客a[1]h8?~oE9Q

                     break

.xS)i y1L


 

 

EL5Ln[I0

 

 

                     ;;itlab博客.W z7Y"B*G7|

              *)itlab博客z8^ [}hm$v4`

                     echo "please choose between 1-3"

3Y3|[1]]‑h9Kp(X0

                     ;;itlab博客(j1F?[1]w]"zw

              esacitlab博客/i'U N#lWzKB


 

 

       doneitlab博客a-XX(C[1]l a

 

yb9y0u*hj+{3s0

       echo "what do you want to know?"itlab博客8y"M%AE#GH[

       select var in "location" "info" "package name"

I


 

 

~%_4~~2~0

 

 

       doitlab博客,C3Ff S.M_]%w


 

 

              case $var in

E T/RUH7r c0

              location)itlab博客 |:Xz}8L0e‑/6d

                     option=$option"l"

S


 

 

Ee&uquP6U0

 

 

                     breakitlab博客7VXsB[m1F ]:x M
i


 

 

                     ;;

-x(uBx:q6IX


 

 

w)t0

 

 

              info)itlab博客 T5s)`|J0nNz2] Z

                     option=$option"i"

G'a;tgs V0

                     breakitlab博客T Fx7z|v r'O U­m


 


 

 

                     ;;

4d5Q6F‑~;F%o l^0

              package/ name)itlab博客g:g0B‑XnKf

                     break

zGs)m0k[


 

 

U0

 

 

                     ;;itlab博客2/M0tk,|K7P

              *)itlab博客 trn8f‑n:~(p"Y @ R5s

                     echo "please choose between 1-3"

[1]P2C-mh1Q0

                     ;;

4M}#X0w4v0

              esac

‑oZ?*W0Y0

       done

6U hu Rk0

 

Uq:O
` c#^‑L


 

 

mSa+M0

 

 

       ${RPM}  $option $argumentitlab博客 D%?
Irv!` n f6|

 

i!aL5EPo4a0

       echo "continue? [yes/no]"itlab博客
rr‑r'@gs ? ?n

       read answer

p2u


 

 

X5i]{0

 

 

 

|`u*i!C@&a"GQ0

       if [ answer = "no" ]

^2tK/RT ] h5R‑k0

       then

I:Y A.f-U c0

              break

6O ?5v*GP2r1?*LL
K0

       fiitlab博客#T K,/"D0R/a2B:V3f

done

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值