Shell 练习汇总--持续更新中

  • 本文中的题目均来自于互联网

2020-10-29

  1. 请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为2020-10-29.log, 并且把磁盘的使用情况写到到这个文件中,(不用考虑cron,仅仅写脚本即可)!
#!/bin/bash
file_name=`date -d "today" "+%Y-%m-%d"`
touch ${file_name}.log
df -h > ${file_name}.log
  1. 统计日志
  • 有日志1.log,内容如下:
112.111.12.248 - [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com "/seccode.php?update=0.5593110133088248" 200"http://formula-x.haotui.com/registerbbs.php" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)"
61.147.76.51 - [25/Sep/2013:16:08:31 +0800]xyzdiy.5d6d.com "/attachment.php?aid=4554&k=9ce51e2c376bc861603c7689d97c04a1&t=1334564048&fid=9&sid=zgohwYoLZq2qPW233ZIRsJiUeu22XqE8f49jY9mouRSoE71" 301"http://xyzdiy.5d6d.com/thread-1435-1-23.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
  • 要求: 统计出每个IP的访问量有多少?
cat 1.log | awk '{print $1}' | sort -n  | uniq -c
  1. 统计内存使用
  • 写一个脚本计算一下linux系统所有进程占用内存大小的和。(提示,使用ps或者top命令)
ps aux | grep -v "RSS" |awk '{ ((sum=sum+$6))}END{print sum}' 

或者

#!/bin/bash
sum=0
for mem in `ps aux | grep -v "RSS" | awk '{print $6 }'`
do 
	sum=$(($sum+$mem))
done
echo "The total memory is $sum k"
  1. 批量更改文件名
  • 找到/123目录下所有后缀名为.txt的文件,
  • 批量修改.txt为.txt.bak
  • 把所有.bak文件打包压缩为123.tar.gz
  • 批量还原文件的名字,即把增加的.bak再删除
#!/bin/bash
##找到.txt文件
find /mnt/files -type f -name "*.txt" > new_files
#遍历 重命名
for file in `cat new_files`
do 
mv $file $file.bak
done
#创建新目录 为压缩做准备
dir_name=`date "+%Y%m%d"`
mkdir $dir_name
for file in `cat new_files`
do 
	cp $file.bak ./$dir_name
done
##压缩
tar czf $dir_name.tar.gz $dir_name/
#还原
for file in `cat new_files`
do 
	mv $file.bak $file
done

2020-10-31

  1. 求100内的质数。(通过shell 脚本)
#!/bin/bash
echo 2
for i in `seq 3 2  100`
do
        for j in `seq 2 $i`
        do
                if [ $(($i%$j)) -ne 0  ]
                then
                        echo $i
                        break
                fi
        done
done
  1. 编写个shell脚本将当前目录下大于10K的文件转移到/tmp目录下
#!/bin/bash
file_name=/mnt/myr
cd /mnt/myr
echo `ls $file_name` > newfiles
for i in `cat newfiles`
do 
	file_memory=`du -b $i`| awk '{print $1}'
	if [[ $file_memory -lt 10 ]]
	then 
		#echo yes
		mv $i /tmp
	fi
done

猜你喜欢

转载自blog.csdn.net/wnccmyr/article/details/109367046