shell编程案例.docx
- 文档编号:8012811
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:12
- 大小:21.64KB
shell编程案例.docx
《shell编程案例.docx》由会员分享,可在线阅读,更多相关《shell编程案例.docx(12页珍藏版)》请在冰豆网上搜索。
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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- shell 编程 案例
![提示](https://static.bdocx.com/images/bang_tan.gif)