1.查找当前目录中所有大于500M的文件,把这些文件名写到一个文本文件中,并统计其个数。
find
./ -size +500M -type f | tee file_list | wc -l
2.在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。
for
filename in `find /tmp -type f -name "abc*"|head -n 100`
do
sed
-n ‘1p‘ $filename>>new
done
3.把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。
grep
-xvf a b | tee c | wc -l
5.每隔10分钟监控一次,监控/usr下如果大于5G,发邮件给管理员
#!/bin/bash
while
true
do
sleep 600
n=$(du -s /usr | cut -f1)
if [ $n -gt 5242880 ]
then
mail -s "greater" filwsyl@gmail.com < ~/filename
#将文件filename的内容发送出去。
fi
done
把某个目录下的文件扩展名改为bat,再以时间为文件名压缩打包存放到某个目录。
#!/bin/bash
for
file in $(ls $1)
do
new_file=${file%.*}.bat
mv ./$1/$file
./$1/$new_file
tmp=$(date +%y)
tar
cvf ./$tmp.tar
./$1
done
9.从网上下载一个文件,保存到指定目录
#!/bin/bash
url=http://rs1.bn.163.com/ent/2009/05/20_canquedege.wma
dir=~/下载
wget
-P $dir $url
10.判断一个数是不是完数。打印出1-1000之间的完数。
完数就是约数的和等于自身2倍的数。(6,28,496)
#!/bin/bash
sub()
{
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=1
while [ $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/bash
for file in $(ls
$2)
do
bname=$(grep -l $1
$2/$file)
basename $bname
done
调用方法:./tst 000
bash#在文件夹bash中查找含有“000”的文件。
19.一个文件内容全部是类似
【202.205.151.21】--【23:59:22】-“HTTP
GET”-“Mozila”
...
写一个SHELL命令找出最多的10个IP
awk -F "--" ‘{print $1}‘ shit |
sort | uniq -c | sort -r | sed -n
‘1,10p‘
20./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`
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_FILE
done
我的解法:
#!/bin/bash
new_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/$update
done
21.要求:在一个脚本中完成这个程序
1.从文件user.list中取出已给定的用户名和用户组,将这些用户和组按规则添加到系统中
2.从password.list中读取已经给定的用户密码。
user.list如下
zhangsan
adminuser,dbuser,updatauser
lisi dbuser,updatauser
wanger
updatauser,wheel
#!/bin/bash
#group add
for x in ‘awk ‘{print $2}’
user.list | sed ’s/,/\n/g’ | sort | uniq -c|sed
’s/[^a-zA-Z]//g”
do
groupadd $x
&> /dev/null
done
#back message
if
(($?==0))
then
echo “Group
Ok!!”
else
exit 1
fi
#user add
for i in ‘awk
‘{print $1}’ user.list’
do
for y in ‘awk ‘{print $2}’
password.list’
do
useradd $i
&> /dev/null
echo $y | passwd –stdin $i &>
/dev/null
done
done
#back message
if
(($?==0))
then
echo “User
Ok!”
else
exit 1
fi
#add users to groups
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 “All
Finished!”
fi
原文地址http://www.zhangyiqun.cn/115.html
22.比较两个小数大小。
awk
-v num1=6.6 -v num2=5.5 ‘BEGIN{print(num1>num2)?"0":"1"}‘
echo "0.14 >
0.15" | bc
expr 1.2 \< 1.3
原文:http://www.cnblogs.com/bigbean/p/3661550.html