Shell程序实例集锦一
前言:下面这些hell实例都是自己写的或者用过的一些Shell小程序。整理整理。 ——Ajian
1、删除B文件中和A文件相同的内容
#!/bin/sh # Ajian for file in `cat a.list | cut -d. -f1` do sed -i '/'$file'/d' b.list done
2、根据文件名的前四位创建二级目录
#!/bin/sh #Ajian for dir in `cat dir.list` do dir1=`echo $dir | cut -c1-2` dir2=`echo $dir | cut -c3-4` if [ ! -d "$dir1/$dir2" ]; then mkdir -p "$dir1/$dir2" fi done
3、查看网卡流量
#!/bin/bash #netflood #Ajian while : ; do time=`date +%m"-"%d" "%k":"%M` day=`date +%m"-"%d` rx_before=`ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-` tx_before=`ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-` sleep 2 rx_after=`ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-` tx_after=`ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-` rx_result=$[(rx_after-rx_before)/256] tx_result=$[(tx_after-tx_before)/256] echo "$time Now_In_Speed: "$rx_result"kbps Now_OUt_Speed: "$tx_result"kbps" sleep 2 done
4、系统状况监控
#!/bin/sh #statistic.sh #Ajian IP=192.1681.41 top -n 2| grep "Cpu" >>./data/cpu.txt free -m | grep "Mem" >> ./data/mem.txt df -k | grep "sda1" >> ./data/drive_sda1.txt #df -k | grep sda2 >> ./data/drive_sda2.txt df -k | grep "/mnt/storage_0" >> ./data/mnt_storage_0.txt df -k | grep "/mnt/storage_pic" >> ./data/mnt_storage_pic.txt time=`date +%m"."%d" "%k":"%M` connect=`netstat -na | grep "172.16.20.5:80" | wc -l` echo "$time $connect" >> ./data/connect_count.txt
5、系统服务及系统状况分析
#!/bin/sh #server ################################# #modify by ajian #function: It is convenient to restart some servers and reduce the wasted time. #DATE: 2007-7-2 ################################# #路径配置区 APACHEPATH="" SMB_LOCAL_PATH1="" SMB_REMOTE_PATH1="" SMB_LOCAL_PATH2="" SMB_REMOTE_PATH2="" ################################# #应用配置区 SMBUSER="" SMBPASS="" SMB_UID= SMB_GID= ################################# case $1 in "apache") if [ $2 = "start" ] then echo "starting apache ..." $APACHEPATH/apachectl start echo "apache is started." pidof httpd elif [ $2 = "stop" ] then echo "stopping apache ..." $APACHEPATH/apachectl stop echo "apache is stopped." elif [ $2 = "restart" ] then echo "restarting apache ..." $APACHEPATH/apachectl stop sleep 5 $APACHEPATH/apachectl start echo "apache is restarted." pidof httpd else echo "apache's $2 is error." fi ;; "smb") if [ $2 = "remount" ] then echo "remounting smbfs..." umount -f $SMB_LOCAL_PATH1 umount -f $SMB_LOCAL_PATH2 echo "umount is finished." sleep 5 mount -t smbfs -o username=$SMBUSER,password=$SMBPASS,ui d=$SMB_UID,gid=$SMB_GID $SMB_REMOTE_PATH1 $SMB_LOCAL_PATH1 mount -t smbfs -o username=$SMBUSER,password=$SMBPASS,ui d=$SMB_UID,gid=$SMB_GID $SMB_REMOTE_PATH2 $SMB_LOCAL_PATH2 echo "mount is finished." df -h elif [ $2 = "mount" ] then mount -t smbfs -o username=$SMBUSER,password=$SMBPASS,ui d=$SMB_UID,gid=$SMB_GID $SMB_REMOTE_PATH1 $SMB_LOCAL_PATH1 mount -t smbfs -o username=$SMBUSER,password=$SMBPASS,ui d=$SMB_UID,gid=$SMB_GID $SMB_REMOTE_PATH2 $SMB_LOCAL_PATH2 echo "mount is finished." df -h else echo "smb's $2 is error." fi ;; "all") echo "restart apache and remount..." $APACHEPATH/apachectl stop sleep 5 umount -f $SMB_LOCAL_PATH1 umount -f $SMB_LOCAL_PATH2 sleep 5 mount -t smbfs -o username=$SMBUSER,password=$SMBPASS,uid=$SMB_U ID,gid=$SMB_GID $SMB_REMOTE_PATH1 $SMB_LOCAL_PATH1 mount -t smbfs -o username=$SMBUSER,password=$SMBPASS,uid=$SMB_U ID,gid=$SMB_GID $SMB_REMOTE_PATH2 $SMB_LOCAL_PATH2 echo "mount is finished." df -h $APACHEPATH/apachectl start echo "apache is restarted." sleep 5 pidof httpd ;; "status") if [ $2 = "grather" ] then echo "Gather the status of the computer ....." /movivi/status.sh echo "Gather is finished." elif [ $2 = "analyze" ] then echo "analyze the status.ch ......" /movivi/analyze.sh cat /movivi/data/sumary.txt fi ;; *) echo "The method of using the script." echo "" echo " server apache stop means: 关闭apache." echo " server apache start means: 启动apache." echo " server apache restart means: 重启apache." echo " server remount means: 关闭Mount点再挂载." echo " server mount means: 直接挂载Mount点." echo " server all means: Include all of above." echo " server status gather means: 收集系统信息." echo " server status analyze means: 分析处理并显示系统信息." echo " " echo "" ;; esac
6、服务器采样程序(主要用于邮件发送报警 格式问题)
#!/bin/sh # Create By : Ajian # file: watch.sh # Time: 2007-10-31 ############################ INPUT=/root/message TIME=`date +%m"."%d" "%k":"%M` echo "###################################################################################################" >> $INPUT echo "###################################################################################################" >> $INPUT echo "采样时间点: $TIME" >> $INPUT echo "" >> $INPUT echo "CPU使用情况:" >> $INPUT top -n 3 -b | grep "Cpu" | awk '{print $1 $2 $3 $4 $5}'>> $INPUT echo "" >> $INPUT echo "内存使用情况:(单位M)" >> $INPUT free -m >> $INPUT echo "" >> $INPUT echo "服务器连接数:" >> $INPUT echo "Web连接 :`netstat -na | grep ":80" | wc -l`" >> $INPUT echo "TIMEWAIT连接:`netstat -na | grep ":80" | grep "TIME_WAIT" | wc -l`" >> $INPUT echo "数据库连接:`netstat -na | grep "3306" | wc -l`" >> $INPUT echo "" >> $INPUT echo "Apache 进程数:`ps aux | grep httpd | wc -l`" >> $INPUT echo "注:采样十分钟取一次,一小时发送一次" >> $INPUT
转载于:https://blog.51cto.com/makert/54813