转载出处:https://blog.csdn.net/lile269/article/details/6658885
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
4.判断一文件是不是块或字符设备文件,如果是将其拷贝到 /dev 目录下
read -p “input a file:” filename
if [ -b $filename -o -c $filename ]
then
cp KaTeX parse error: Expected 'EOF', got '#' at position 66: …5G,发邮件给管理员<br> #̲!/bin/bash<br> …(du -s /usr | cut -f1)
if [ $n -gt 5242880 ]
then
mail -s “greater” filwsyl@gmail.com < ~/filename #将文件filename的内容发送出去。
fi
done
6.从a.log文件中提取包含"WARNING"或"FATAL",同时不包含"IGNOR"的行,然后提取以":“分割的第5个字段
grep -E ‘WARNING|FATAL’ a.log | grep -v IGNOR | awk -F “:” ‘{print $5}’
7.编写一个脚本,进行简单的减法运算,要求提示输入变量
#!/bin/bash
read -p “input a number:” num1
read -p “input another number:” num2
let “num3=num1-num2”
echo $num3
8.把某个目录下的文件扩展名改为bat,再以时间为文件名压缩打包存放到某个目录。
#!/bin/bash
for file in $(ls KaTeX parse error: Expected 'EOF', got '&' at position 15: 1)<br> do<br> &̲nbsp; &nbs…{file%.}.bat
mv ./
1
/
1/
1/file ./
1
/
1/
1/new_file
tmp=KaTeX parse error: Expected 'EOF', got '&' at position 16: (date +%y)<br> &̲nbsp; &nbs…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=2num”
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 KaTeX parse error: Expected 'EOF', got '&' at position 15: 2)<br> do<br> &̲nbsp; &nbs…(grep -l $1
2
/
2/
2/file)
basename KaTeX parse error: Expected 'EOF', got '#' at position 129: …中xx从01到30。<br> #̲!/bin/bash<br> …(echo KaTeX parse error: Expected 'EOF', got '&' at position 24: …'s/99//');<br> &̲nbsp; &nbs…xx -p “”
done
14.实现自动删除50个账号的功能。账号名为stud1至stud50
#!/bin/bash
i=0
while [ i -le 50 ]
do
let i++
userdel -r stud$i
done
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.sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
filename=date +%y%m%d
_etc.tar.gz
cd /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 -e
no crontab for sword - using an empty one
crontab: installing new crontab
查看结果:
[root@localhost cron]# crontab -u sword -l
显示内容是:/var/spool/cron/sword 文件的内容。
vim ~/shit.sh
#!/bin/bash
cp /user/backup/* /tmp/
--------------------------------------------
crontab -e
0 0 * * 0 ~/shit.sh &
18.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其
中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。
#!/bin/bash
for ((i=1;i<=50;i++))
do
mkdir -p /usrdata/userKaTeX parse error: Expected 'EOF', got '&' at position 7: i<br> &̲nbsp; &nbs…i
done
19.一个文件内容全部是类似
【202.205.151.21】–【23:59:22】-“HTTP GET”-“Mozila”
…
写一个SHELL命令找出最多的10个IP
awk -F “–” '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲' shit | sort |…EXT_NAME" -print<br> for each in $SRC_FILE_LIST; do<br> DEST_FILE_PART1=
echo $each | awk -F"" '{print $1}'<br> OLD_NUM=
echo $each | awk -F"" ‘{print $3}’ | awk -F"." '{print $1}'<br> DEST_FILE_PART3=
expr $OLD_NUM + 500<br> [ $DEST_FILE_PART3 -gt 999 ] && DEST_FILE_PART3=
expr $OLD_NUM - 499<br> && DEST_FILE_PART3=
printf %03d KaTeX parse error: Expected 'EOF', got '&' at position 22: …ILE_PART3`<br> &̲nbsp; &nbs…DEST_FILE_PART1 D E S T F I L E P A R T 2 DEST_FILE_PART2 DESTFILEPART2DEST_FILE_PART3$EXT_NAME
echo “mv $each to $DEST_FILE”
mv $each KaTeX parse error: Expected 'EOF', got '#' at position 34: …<br> 我的解法:<br> #̲!/bin/bash<br> …(date +20%y%m%d);
for file in KaTeX parse error: Expected 'EOF', got '&' at position 24: …sh)<br> do<br> &̲nbsp; &nbs…(echo "KaTeX parse error: Expected 'EOF', got '&' at position 219: …l="<math xmlns=&̲quot;http://www…(echo $i | sed ‘s/^0*[0−9]∗[0−9]∗[0-9]*[0-9]*.dat/\1_‘KaTeX parse error: Expected group after '_' at position 10: new_file'_̲'ii’.dat/’)
mv ~/bash/ f i l e / b a s h / file ~/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 KaTeX parse error: Expected 'EOF', got '&' at position 3: x &̲amp;> /dev/n…?==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 KaTeX parse error: Expected 'EOF', got '&' at position 3: i &̲amp;> /dev/n…?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 KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲” ‘awk “NR==q {print $1}” user.list | awk ‘{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲” &> /de…?==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
- 1 * * root ./fileback.sh &