shell编程案例.docx

上传人:b****6 文档编号:8012811 上传时间:2023-01-27 格式:DOCX 页数:12 大小:21.64KB
下载 相关 举报
shell编程案例.docx_第1页
第1页 / 共12页
shell编程案例.docx_第2页
第2页 / 共12页
shell编程案例.docx_第3页
第3页 / 共12页
shell编程案例.docx_第4页
第4页 / 共12页
shell编程案例.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

shell编程案例.docx

《shell编程案例.docx》由会员分享,可在线阅读,更多相关《shell编程案例.docx(12页珍藏版)》请在冰豆网上搜索。

shell编程案例.docx

shell编程案例

1.查找当前目录中所有大于500M的文件,把这些文件名写到一个文本文件中,并统计其个数。

#!

/bin/bash

count=0

forfilein`find./-size+512000k`

do

count=`expr$count+1`

echo$file>>new

done

echo"$count"

2.在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。

#!

/bin/bash

count=0

forfilein`find/tmp-name"abc*"`

do

head-n1$file>>new

count=`expr$count+1`

if[$count-gt100];then

break

fi

done

3.把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。

grep-vfab|cat>c

grep-vfab|wc-l

4.判断一文件是不是块或字符设备文件,如果是将其拷贝到/dev目录下

read-p"inputafile:

"file

if[-c$file-o-b$file];then

cp$file/dev/

fi

5.每隔10分钟监控一次,监控/usr下如果大于5G,发邮件给管理员

#!

/bin/bash

whiletrue

do

n=`du-s/usr|cut-f1`

if[$n-gt1];then

mail-s"greater"295322935@

fi

sleep600

done

6.从a.log文件中提取包含"WARNING"或"FATAL",同时不包含"IGNOR"的行,然后提取以":

"分割的第5个字段

grep-E"WARNING|FATAL"a.log|grep-v"IGNOR"|cut-f5-d':

'

7.编写一个脚本,进行简单的减法运算,要求提示输入变量

#!

/bin/bash

if[$#=2];then

num3=`expr$1-$2`

else

read-p"inputanumber:

"num1

read-p"inputanothernumber:

"num2

num3=`expr$num1-$num2`

fi

echo$num3

8.把某个目录下的文件扩展名改为bat,再以时间为文件名压缩打包存放到某个目录。

#!

/bin/bash

iftest$#-eq1-a-d$1;then

forfilein`ls$1`

do

mv$file$file.bat

done

filename=date+%y%m%d

tar-cjvf$filename.tar.bz2

else

echo"inputdir"

readdir

forfilein`ls$dir`

do

mv$file$file.bat

done

filename=date+%y%m%d

tar-cjvf$filename.tar.bz2

fi

9.判断一个数是不是完数。

打印出1-1000之间的完数。

完数就是约数的和等于自身2倍的数。

(6,28,496)

(1)

#!

/bin/bash

sub()

{

   i=1;

   sum=0;

   while[$i-le$num]

   do

      let"m=num%i"

      if[$m-eq0]

      then

         let"sum=sum+i"

      fi

      let"i=i+1"

   done

   let"a=2*num"

   if[$a-eq$sum]

   then

      echo$num

   fi

}

num=1

while[$num-le1000]

do

   sub

   let"num=num+1"

done

(2)

#!

/bin/bash

for((i=1;i<=1000;i++))

do

sum=0

for((j=1;j<=i;j++))

do

m=`expr$i%$j`

if[$m-eq0];then

sum=`expr$sum+$j`

fi

done

y=`expr$i\*2`

if[$y-eq$sum];then

echo$i

fi

done

10.在某个文件夹下查找含有指定字符串的文件

#!

/bin/bash

forfilein`ls$2`

do

f=`grep-l$1$2$file`

echo$f

done

调用方法:

./tst000bash#在文件夹bash中查找含有“000”的文件。

11.添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。

groupaddclass1

for((i=0;i<=30;i++))

do

if[$i-lt10];then

no="0$i"

else

no="$i"

fi

echo"stu$no"

useradd-gclass1stu$no

passwd-dstu$no

chage-d0stu$no

done

12.实现自动删除50个账号的功能。

账号名为stud1至stud50

#!

/bin/bash

for((i=0;i<=50;i++))

do

userdel-rstu$i

done

13.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:

读;文件所有者的权限为:

读、写、执行;文件所有者所在组的权限为:

读、执行。

#!

/bin/bash

mkdir/userdata

cd/userdata

for((i=1;i<=50;i++))

do

mkdiruser$i

chmod754user$i

done

14.一个文件内容全部是类似

【202.205.151.21】--【23:

59:

22】-“HTTPGET”-“Mozila”

...

写一个SHELL命令找出最多的10个IP

awk-F"--"'{print$1}'shit|sort|uniq-c|sort-r|sed-n'1,10p'

个人cat$1|cut-c2-15|sort|uniq

15./tmp路径下有800个文件

文件名的格式是:

filename_YYYYMMDD_序列号(从001到999).dat,例如:

filename_20040108_089.dat。

现在想把这些文件改名,新文件名的格式是:

filename_TODAY(当前日期)_序列号(从500开始,到达999之后从001开始).dat,例如:

把filename_20040108_089.dat改为filename_20041222_589.dat,注意新文件名的序列号的顺序需要和原来的一致,即要做排序处理。

#!

/usr/bin/bash

DEST_FILE_PART2="_`date'+%Y%m%d'`_"

EXT_NAME=".dat"

SRC_FILE_LIST=`find/tmp-name"*_*_*$EXT_NAME"-print`

foreachin$SRC_FILE_LIST;do

   DEST_FILE_PART1=`echo$each|awk-F"_"'{print$1}'`

   OLD_NUM=`echo$each|awk-F"_"'{print$3}'|awk-F"."'{print$1}'`

   DEST_FILE_PART3=`expr$OLD_NUM+500`

   [$DEST_FILE_PART3-gt999]&&DEST_FILE_PART3=`expr$OLD_NUM-499`

       &&DEST_FILE_PART3=`printf%03d$DEST_FILE_PART3`

   DEST_FILE=$DEST_FILE_PART1$DEST_FILE_PART2$DEST_FILE_PART3$EXT_NAME

   echo"mv$eachto$DEST_FILE"

   mv$each$DEST_FILE

done

我的解法:

#!

/bin/bash

new_file=$(date+20%y%m%d);

forfilein$(ls~/bash)

do

   i=$(echo"$file"|sed's/.*_[0-9]*_\([0-9]*\).dat/\1/')   #取出序列号

   i=$(echo$i|sed's/^0*\([0-9]*\)/\1/')            #去掉序列号前面可能的‘0’,

   let"ii=i+500"

   if[$ii-gt999]

   then

      let"ii=ii-999"

   fi

   ii=`printf%03d$ii`                     #添上可能需要的‘0’

   update=$(echo"$file"|sed's/\(.*\)_[0-9]*_[0-9]*.dat/\1_'$new_file'_'$ii'.dat/')

   mv~/bash/$file~/bash/$update

done

临时:

#

forfilein`ls/tmp`

do

f1=$(date+20%y%m%d);

f2_1=cat$file|cut-f3-d'_'|cut-f1-d'.'

if[f2_1-lt500];then

f2=`expr$f2_1+500`

else

f2=`expr$f2_1-499`

fi

new_filename="filename_$f1_$f2.dat"

mv$file$new_filename

done

个人解法

#

forfilein`ls/tmp`

do

f1=$(date+20%y%m%d);

f2_1=`echo$file|cut-f3-d'_'|cut-f1-d'.'`

echo$f2_1

if[$f2_1-lt500];then

f2=`expr$f2_1+500`

else

f2=`expr$f2_1-499`

fi

new_filename="filename_$f1_$f2.dat"

mv/tmp/$file/tmp/$new_filename

done

16.要求:

在一个脚本中完成这个程序

1.从文件user.list中取出已给定的用户名和用户组,将这些用户和组按规则添加到系统中

2.从password.list中读取已经给定的用户密码。

user.list如下

zhangsanadminuser,dbuser,updatauser

lisidbuser,updatauser

wangerupdatauser,wheel

#!

/bin/bash

#groupadd

forxin‘awk‘{print$2}’user.list|sed’s/,/\n/g’|sort|uniq-c|sed’s/[^a-zA-Z]//g”

do

       groupadd$x&>/dev/null

done

#backmessage

if(($?

==0))

then

       echo“GroupOk!

!

else

   exit1

fi

#useradd

foriin‘awk‘{print$1}’user.list’

do

   foryin‘awk‘{print$2}’password.list’

   do

   useradd$i&>/dev/null

   echo$y|passwd–stdin$i&>/dev/null

   done

done

#backmessage

if(($?

==0))

then

   echo“UserOk!

else

   exit1

fi

#adduserstogroups

for((q=1;q<=3;q++))

do

   usermod-G‘awk“NR==$q{print$2}”user.list|awk‘{print$2}”‘awk“NR==$q{print$1}”user.list|awk‘{print$1}”&>/dev/null

done

if(($?

==0))

then

   echo“AllFinished!

fi

原文地址

17.比较两个小数大小。

awk-vnum1=6.6-vnum2=5.5'BEGIN{print(num1>num2)?

"0":

"1"}'

echo"0.14>0.15"|bc

expr1.2\<1.3

18终端取字符

#!

/bin/sh

echo"Inputdatewithformatyyyymmdd:

\c"

readyearmonthday

echo"Todayis$year/$month/$day,right"

echo"pressentertoconfirmandcontinue\c"

reada

echo"Iknowthedate,bye"

注释:

#!

/bin/sh指定解析shell的类型,sh为传统shell,bash为默认使用的shell

\c这个转义字符表示,不换行,只能使用与sh类型的shell

19判断文件类型

#!

/bin/sh

if[$#-ne1]

thenecho"agrciserror"

exit

fi

if[-f$1]

thenecho"thisisfile"

fi

if[-d$1]

thenecho"thisisdirctory"

fi

20文件拷贝

#!

/bin/sh

if[$#-ne1]

then

echopleaseinput1argument

exit

fi

if[-d$HOME/$1]

then

echodirctoryisexsit,copying...

else

mkdir$HOME/$1

fi

flist=`ls`

forfilein$flist

do

cp$file$HOME/$1

done

echocopydone

21判断用户是否在线

#!

/bin/sh

check_user()

{

user=`who|cut-f1-d''`

fornamein$user

do

if[$name=$1]

then

return1

else

return0

fi

done

}

whiletrue

do

echo"inputusername:

\c"

readname

check_user$name

if[$?

-eq1]

then

echo"usernameisonline"

else

echo"usernameisoffline"

fi

done

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1