常用shell实例收集
来源:互联网 发布:淘宝网页代码怎么上传 编辑:程序博客网 时间:2024/05/16 12:59
新增:
处理文件
a 1
a 2
b 3
c 4
转变成
a 1 2
b 3
c 4
#!/bin/bashuniq=`cat a.txt| awk '{print $1}' | sort | uniq`for item in $uniqdo line=`cat a.txt | grep $item | awk -v item=$item 'BEGIN{count="";}{if($1==item){count=(count" "$2);}}END{print item, count}'` echo $line >> b.txtdone
处理成
a 3
b 3
c 4
#!/bin/bashsrc=$1dst=$2uniq=`cat $src | awk '{print $1}' | sort | uniq`for host in $uniqdo line=`cat $src | grep $host | awk -v host=$host 'BEGIN{count=0;}{if($1==host){count+=$2;}}END{if(count!=0) print host, count}'` echo $line >> $dstdone
上述两个例子都可以用一句awk搞定
cat a.txt | awk '{a[$1]=(a[$1]" "$2)}END{for (i in a) print i,a[i];}'
打乱sort后的文本顺序
while read i;do echo "$i $RANDOM";done<file.txt|sort -k2n| awk '{print $1}'
读取文件后缀
echo ${$file##*.}
1.查找当前目录中所有大于500M的文件,把这些文件名写到一个文本文件中,并统计其个数。
find ./ -size +500M -type f | tee file_list | wc -l还可使用c,k.注意输出为./xxx.file,如果要使用文件名,去掉前两个字符。find ./ -size +100c -exec basename {} \;
查找文件夹下所有.c文件并拷贝到另一文件夹下
find ./ -name *.c | xargs -i cp {} test
2.在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中
for filename in `find /tmp -type f -name "abc*"|head -n 100`dosed -n '1p' $filename>>newdone
3.把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。
grep -xvf a b | tee c | wc -l grep –f a.txt b.txt自己试试grep -f 的用法吧 -v是取反
4.判断一文件是不是块或字符设备文件,如果是将其拷贝到 /dev 目录下
read -p "input a file:" filenameif [ -b $filename -o -c $filename ]then cp $filename /dev/fi
5.每隔10分钟监控一次,监控/usr下如果大于5G,发邮件给管理员
#!/bin/bashwhile truedo sleep 600 n=$(du -s /usr | cut -f1) if [ $n -gt 5242880 ] then mail -s "greater" xxxxx@gmail.com < ~/filename #将文件filename的内容发送出去。 fidone最好判断root权限, 在脚本中加入
if [ $(id -u) != "0" ]; then printf "Error: You must be root to run this script!\n" exit 1fi
6.从a.log文件中提取包含"WARNING"或"FATAL",同时不包含"IGNOR"的行,然后提取以":"分割的第5个字段
grep -E 'WARNING|FATAL' a.log | grep -v 'IGNOR' | awk -F ":" '{print $5}'
7.编写一个脚本,进行简单的减法运算,要求提示输入变量
#!/bin/bashread -p "input a number:" num1read -p "input another number:" num2let "num3=num1-num2"echo $num3
8.把某个目录下的文件扩展名改为bat,再以时间为文件名压缩打包存放到某个目录。
#!/bin/bashfor file in $(ls $1)do new_file=${file%.*}.bat mv ./$1/$file ./$1/$new_file tmp=$(date +%y) tar cvf ./$tmp.tar ./$1done
9.从网上下载一个文件,保存到指定目录
#!/bin/bashurl=http://rs1.bn.163.com/ent/2009/05/20_canquedege.wmadir=~/下载wget -P $dir $url
10.判断一个数是不是完数。打印出1-1000之间的完数。完数就是约数的和等于自身2倍的数。(6,28,496)
#!/bin/bashsub(){ i=1; sum=0; while [ $i -le $num ] do let "m=num%i" if [ $m -eq 0 ] then let "sum=sum+i" fi let "i=i+1" done let "a=2*num" if [ $a -eq $sum ] then echo $num fi}num=1while [ $num -le 1000 ]do sub let "num = num+1"done
11.以行为单位,求文件A和文件B交集,并集,差集。
并:sort -m <(sort A | uniq) <(sort B | uniq) | uniq交:sort -m <(sort A | uniq) <(sort B | uniq) | uniq -d差:sort -m <(sort A | uniq) <(sort B | uniq) <(sort B | uniq) | uniq -u
12.在某个文件夹下查找含有指定字符串的文件
#!/bin/bashfor file in $(ls $2)do bname=$(grep -l $1 $2/$file) basename $bnamedone调用方法:./tst 000 bash#在文件夹bash中查找含有“000”的文件。
13.添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。
#!/bin/bashgroupadd class1for i in {9901..9930}do xx=$(echo $i | sed 's/99//'); useradd -g class1 std$xx -p ""done
14.实现自动删除50个账号的功能。账号名为stud1至stud50
#!/bin/bashi=0while [ i -le 50 ]do let i++ userdel -r stud$idone
15.某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
(1)在下午4 :50删除/abc目录下的全部子目录和全部文件;
(2)从早8:00~下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内;
(3)每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;
(4)在下午5:55将IDE接口的CD-ROM卸载(假设:CD-ROM的设备名为hdc);
(5)在早晨8:00前开机后启动。
vim /etc/crontab 在里面增加下面内容:1)50 16 * * * root rm -rf /abc/* 2>&1 &2)00 8-18 * * * root cat /xyz/x1|awk '{print $1}' >> /backup/bak01.txt 2>&1 &3)50 17 * * 1 root cd /data;tar -zcvf backup.tar.gz * 2>&1 &4)55 17 * * * root umount /hdc 2>&1 &5)在早晨8:00前开机后启动 --> 这个我不是很明白它的意思,不知道是不是8点前开机就启动上面的设定,8点后才开机就不用启动的意思。姑且用下面这个命令吧。chkconfig --level 2345 crond on
16.设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名
为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下。
vim /usr/bin/fileback.sh#!/bin/bash#fileback.sh#file executable: chmod 755 fileback.shPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATHfilename=`date +%y%m%d`_etc.tar.gzcd /etc/tar -zcvf $filename *mv $filename /root/bak/------------------------------------------------------vim /etc/crontab 加入* * 1 * * root ./fileback.sh &
17.有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?
首先说一下非root用户编写crontab文件的方法。
一:[sword@localhost ~]$ vim cronfile [sword@localhost ~]$ crontab cronfile 二:[sword@localhost ~]$ crontab -eno crontab for sword - using an empty onecrontab: installing new crontab查看结果:[root@localhost cron]# crontab -u sword -l显示内容是:/var/spool/cron/sword 文件的内容。vim ~/shit.sh#!/bin/bashcp /user/backup/* /tmp/--------------------------------------------crontab -e0 0 * * 0 ~/shit.sh &
18.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其
中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。
#!/bin/bashfor ((i=1;i<=50;i++))do mkdir -p/usrdata/user$i cd /usrdata chmod 754 user$idone
19.一个shit.txt文件内容全部是类似
【202.205.151.21】--【23:59:22】-“HTTP GET”-“Mozila”
...
写一个SHELL命令找出最多的10个IP
awk -F "--" '{print $1}' shit.txt | sort | uniq -c | sort -r | sed -n '1,10p'
#!/usr/bin/bashDEST_FILE_PART2="_`date '+%Y%m%d'`_"EXT_NAME=".dat"SRC_FILE_LIST=`find /tmp -name "*_*_*$EXT_NAME" -print`for each in $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 -gt 999 ] && 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 $each to $DEST_FILE" mv $each $DEST_FILEdone
我的解法
#!/bin/bashnew_file=$(date +20%y%m%d);for file in $(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 -gt 999 ] 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/$updatedone
- 常用shell实例收集
- shell 实例收集
- shell 实例收集
- shell 实例收集
- shell 实例收集
- JavaScript 常用实例收集
- 常用shell实例
- shell 实例收集--更新ing
- linux中常用shell命令收集
- liunx常用shell命令收集整理
- shell常用编程及实例
- JavaScript 常用pc实例收集整理
- Shell 编程常用知识点用实例
- Linux运维常用shell脚本实例
- 收集常用的匹配正则表达式和实例......
- 收集一些常用的JS判断函数(附实例)
- JavaScript 经典实例日常收集整理(常用经典)
- 实例说明shell i/o常用重定向
- ios中,uiimage拼接图片的方法
- 两分钟彻底让你明白Android中onInterceptTouchEvent与onTouchEvent
- js tab切换卡
- 新建一个多文档的MFC程序,取消自动创建的文件
- 从n中取出m个不重复的数
- 常用shell实例收集
- android RelativeLayout 内容居中解决办法
- javah 命令小结
- 【Oracle Database 12c新特性】 12c DataPump Expdp/Impdp新特性
- UNIX网络编程——客户/服务器程序设计示范(六)
- eclipse内存分析工具MAT浅谈(一)
- Parcel 在Android 中的应用
- allegro中Autosilk top, Silkscreen top 和Assembly top 和 place bound top 区别
- javah命令详解