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列要运行的命令

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值