shell范例脚本汇总
-------------------要求算出jack和tom的2科的平均分 用shell实现。
cat 1.txt
jack huaxue 90
tom huaxue 70
jack shuxue 99
tom shuxue 80
awk 很好实现 awk '{a[$1]+=$3}END{for (i in a)print i,a[i]/2}' aa
-----------------企业运维面试题 分享 大家看看自己会多少
1、在bash shell里 $0 $? $* $@ 各表示什么意思?
2、当IO出现瓶颈时,应看哪个参数,为什么?
3、怎么查看内存使用情况?看到swap使用量大时,是不是意味着物理内存已不够用?
4、在/var/log下拷贝小于100K的文件到/tmp下,如果有失败的发送邮件到,用shell/perl/python来实现。
5、简述智能DNS的工作原理及CDN的作用
6、根据下面的信息提取每个人的总分 输出到/home/total.txt
oldboy 15 98
kqzj 23 87
wodi 16 89
7、主机CPU是 2×4核 内存16G 怎么配置mysql
8、监控MYSQL复制,如出现停止、不同步时发邮件到。
9、在不影响MYSQL正常服务的情况下,如何导出MYSQL数据。
------------------------要求如下:
写一段完整的shell脚本,完成如下功能:1
查找出/home/目录下的修改时间最新的文件并把这个文件名保存在/usr/temp/temp.txt文件中;2 把/home/目录下的名称为1.
tar.gz文件(假定已经存在)copy到/usr/temp目录中并解压;3 然后删除/home/目录下的2.txt文件(假定已经存在)。
脚本如下:
#!/bin/bash
cd /home/
ls -t|head -1>/usr/temp/temp.txt
cp /home/1. tar.gz /usr/temp/
cd /usr/temp
tar xvfz 1.tar.gz
yes|rm /home/aa/2.txt
还有一个方法:
#!/bin/bash
cd /home/
$1=``find . -type f -exec stat -c "%y %s %n" {} \;|sort -r|head -1|awk '{print $5}'|awk -F / '{print $2}'
echo $1 > /usr/temp/temp.txt
cp /home/1. tar.gz /usr/temp/
cd /usr/temp
tar xvfz 1.tar.gz
yes|rm /home/2.txt
在此感谢
广州-木易水瓶(407298685)提出的ls -t|head -1>/usr/temp/temp.txt
{广州}小丑鱼(422208864)得出的-t sort by modification time
这个比我自己写的简单多了
--------------------------shell脚本监控mysql服务器状态
目的:
1.监控mysql服务器的状态
2.当发现mysql down机就自动重启mysql服务
3.重启mysql不成功,发邮件给管理员警告mysql down机
说明:mysql取用的是3306端口,知道这点我们就好去监控mysql服务状态了,我的脚本就是通过3306端口监控mysql服务的……
#!/bin/sh
cat << EOF
+--------------------------------------+
| === Welcome to LinuxTone=== |
|-------------------------http://www.linuxtone.org------------------------ |
+-------------------------------By:hamgua----------------------------------+
EOF
PORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'`
MYSQLIP=`ifconfig eth0|awk '/inet/{print $2}'|cut -c 6-`
while [ `whoami` == "root" ]
do
if [ "$PORT" == "3306" ];then
echo "mysql is running......"
else
echo "restart mysql"
/etc/init.d/mysqld restart
if [ "$PORT" == "3306" ];then
echo "mysql restart successful......"
else
echo "mysql restart failure......"
echo "server: $MYSQLIP mysql is down,please try to restart mysql!" > /var/log/mymsg
mail -s "warn!server: $MYSQLIP mysql is down" hamgua\@gmail.com < /var/log/mymsg
fi
fi
break
done
赋予check_mysql.sh可执行的权限
#chmod u+x /usr/local/sbin/check_mysql.sh
加入crontab,让系统五分钟检测一次mysql状态
#crontab -l
…………
*/5 * * * * /usr/local/sbin/check_mysql.sh > /dev/null 2>&1
------------------------------------------shell脚本检查memcache进程并自动重启
#!/bin/sh
#check memcache process and restart if down
mm_bin="/usr/local/bin/memcached"
mm_log="/home/xxx/memcached_check.log"
mm_ports=("11211" "11212")
mm_param=("-d -m 20480 -p 11211 -u www" "-d -m 256 -p 11212 -u www")
mm_count=${#mm_ports[@]}
t=$(date -d "today" +"%Y-%m-%d %H:%M:%S")
i=0
while [ $i -lt $mm_count ]
do
mm_exists=`ps -ef|grep "memcached"|grep "${mm_ports[$i]}"|grep -v grep|wc -l`
if [ "$mm_exists" == "0" ]; then
${mm_bin} ${mm_param[$i]} 2>&1 > /dev/null &
echo "${t} : ${mm_bin} ${mm_param[$i]}" >> ${mm_log}
fi
let i++
done
===============================================================
添加为自动执行:
#crontab -e
*/10 * * * * /bin/sh /home/xxx/memcached_check.sh
系统每10分钟会自动执行memcached_check.sh
-------------------------
备用shell语句:
#检查mysql状态
PORT=`netstat -na | grep "LISTEN" | grep "3306" | awk '{print $4}' | awk -F. '{print $2}'`
if [ "$PORT" -eq "3306" ]
#检查mysql占CPU负载
mysql_cpu=`top -U root -b -n 1 | grep mysql | awk '{print $10}'|awk -F. '{print $1}'`
#如果mysql cpu负载大于80,则重启mysql
if [ "$mysql_cpu" -ge "80" ]
#获得相关信息
ps -ef|grep "memcached"|grep -v "grep"|wc -l
ps -ef|grep "memcached"|grep "11211"|grep -v "grep"|wc -l
ps aux|grep "memcached"|grep -v "grep"|awk '{sum+=$4;n++};END{print sum}'
ps aux|grep "memcached"|grep -v "grep"|awk '{printf $1}'
MYPORT=`netstat -na|grep "tcp"|grep "3306"|awk
-F[:" "]+ '{print $5}'`
HAPORT=`netstat -na|grep "udp"|grep "694"|awk -F[:" "]+ '{print $5}'`
PING=`ping -c 5 www.linuxtone.org|awk -F, '/packets/{print $3}'|cut -c 2-|awk '{print $1}'`
DB1IP=`ifconfig eth0|awk '/inet/{print $2}'|cut -c 6-`
----------------------------------------
shell if语句的一些资料:
–b 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-f 当file存在并且是正规文件时返回真
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 当file存在文件大小大于0时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
UNIX Shell 里面比较字符写法:
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
-z 空串
= 两个字符相等
!= 两个字符不等
-n 非空串
------------------------
crontab 的一些资料:
基本格式:
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用 * 或 */1 表示,*/10表示每10分钟
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令