设为首页 收藏本站
查看: 2060|回复: 0

常见的shell实例

[复制链接]

尚未签到

发表于 2018-8-22 12:59:21 | 显示全部楼层 |阅读模式
  1.从磁盘使用统计中排除部分文件
  du  --exclude “*.iso” dir
  2.找出指定目录中最大的10个文件
  find -type f -exec du -k {} \; |sort -nrk 1 |head -n 10
  3. 列出当前系统最长用的10条命令
  cat .bash_history | awk '{print $1}' | sort  | uniq -c | sort -nr | head -10
  4. 统计所有进程所占的常驻内存
  ps -eo rss | awk 'BEGIN {print “所占内存是: ”} /^ *[0-9]/ { total += $1 } END { print total “kib”}'
  实例:
  实例1:采集系统负载数据,并通过gnuplot绘图分析系统热点。
  /opt/cpuload.sh
  #!/bin/bash
  # Create by wxh 2015-07-05
  # Version: v0.1
  # 按照一定的格式采集cpu负载数据并存储在/tmp/mydata文件中。
  uptime | awk '{print $1, $(NF-2), $(NF-1), $NF}' | sed 's/,//g' >> /tmp/mydata
  # 调用gnuplot软件根据采集的数据进行绘图。
  gnuplot  /dev/null && success || failure
  fi
  echo
  RETVAL=$?
  return $RETVAL
  }
  stop() {
  echo -n $"Stopping $prog: "
  $nginx -s stop &> /dev/null && success || failure
  echo
  RETVAL=$?
  }
  reload() {
  echo -n $"Reloading $prog: "

  $nginx -s>  echo
  }
  # See how we were called.
  case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  restart)
  stop
  start
  ;;

  >
  >  ;;
  status)
  status -p ${pidfile} $nginx
  RETVAL=$?
  ;;
  help)
  $nginx -h
  RETVAL=$?
  ;;
  *)
  echo $"Usage: $prog {start|stop|restart|reload|help|status}"
  RETVAL=1
  esac
  exit $RETVAL
  实例4:生产环境批量检测web url,邮件、微信报警。
  /opt/check_weburl.sh
  #!/bin/bash
  # Create by wxh 2015-07-08
  # Version: v0.1
  #应用系统提供的脚本,本脚本中会使用里面的方法,比如action。
  . /etc/init.d/functions
  RETVAL=0 #定义默认返回值为0
  ADDRESS=1206160700 #定义微信好友ID
  CONTENT="/tmp/checkurl.txt"
  function getstatus(){ #定义函数
  FAILCOUNT=0 #定义FAILCOUNT变量的默认值
  #使用wget循环检测3次指定url的状态,如果检测失败FAILCONUT的值+1
  for ((i=1;i/dev/null
  [ $? -ne 0 ] && let FAILCOUNT+=1
  done #判断FAILCOUNT的值如果大于1的话就报警。
  if [ $FAILCOUNT -gt 1 ];then
  RETVAL=1 #检测失败后返回值为1
  NTIME=`date +"%Y-%m-%d %H:%M:%S"` #定义时间格式
  echo "http://$1 is down, ${NTIME}." > $CONTENT #定义报警内容
  php /usr/local/WeiXin-Private-API/test.php $ADDRESS &> /dev/null
  #调用微信接口报警
  else
  RETVAL=0 #检测成功返回值依然为0
  fi
  return $RETVAL #返回值
  }
  #判断urllist.txt文件是否存在
  if [ ! -f /opt/urllist.txt ];then
  echo urllist.txt not found
  exit 1
  fi
  #调用上面定义的函数getstatus()循环检测url列表
  for URL in `cat /opt/urllist.txt`
  do
  echo -n "checking $URL: "
  getstatus $URL && action 健康的  /bin/true || action 挂掉了 /bin/false
  done
  脚本内容到此结束,以下是脚本中调用的urllist.txt文件的内容,一行一个:
  # cat /opt/urllist.txt
  www.westos.org
  192.168.0.145
  实例5: 屏蔽密码尝试失败次数过多的ip
  /opt/check_secure.sh
  #!/bin/bash
  # Create by wxh 2015-07-08
  # Version: v0.1
  #过滤认证失败的主机IP和失败次数,并存储数据到文件
  cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /tmp/black.txt
  #设定变量,超出此值会被脚本屏蔽
  BASELINE="20"
  #循环检测过滤到的数据文件
  for i in `cat /tmp/black.txt`
  do
  IP=`echo $i |awk -F= '{print $1}'` #取出主机ip
  NUM=`echo $i|awk -F= '{print $2}'` #取出失败次数
  if [ $NUM -gt $BASELINE ];then
  #在屏蔽IP之前先确认是否此IP是否已经存在
  grep $IP /etc/hosts.deny > /dev/null
  if [ $? -gt 0 ];then
  echo "sshd:$IP" >> /etc/hosts.deny
  fi
  fi
  done
  可以把脚本放入周期任务,定时自动检测。
  Expect用法:
  #!/usr/bin/expect
  告诉操作系统脚本里的代码使用那一个shell来执行。
  set timeout 30
  设置超时时间的,单位是:秒 ,timeout -1 为永不超时。
  spawn ssh -l user 192.168.0.1
  spawn是进入expect环境后才可以执行的 expect内部命令,它主要的功能是给 ssh运行进程加个壳,用来传递交互指令。
  expect "password:"
  判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则 就等待一段时间后返回,这里等待时长就是前面设置的30秒。
  send "ispass\r"
  这里执行交互动作,与手工输入密码的动作等效。命令字符串结尾别忘记加上 “\r”。
  interact
  执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。
  $argv 参数数组
  expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从 0开始,分别表示第一个,第二个,第三个....参数
  实例6:expect自动交互脚本
  /opt/auto1.sh
  #!/usr/bin/expect
  spawn ssh 192.168.0.120
  expect "(yes/no)?" {
  send "yes\r"
  expect "password:"
  send "westos\r"
  } "password:" {send "westos\r"} "*host " {exit 1}
  expect "#"
  send "df -h\n"
  send "exit\n"
  expect eof
  实例7:文件自动上传脚本
  /opt/upload.sh
  #!/usr/bin/expect
  set DIR [lindex $argv 0]
  spawn lftp 192.168.2.251
  expect "~>"
  send "cd pub\r"
  expect "pub>"
  send "mput $DIR/*\r"
  send "exit\r"
  expect eof
  实例8:批量主机操作(相同密码)
  /opt/auto2.sh
  #!/usr/bin/expect
  foreach ip {
  172.25.0.1
  172.25.0.2
  } {
  spawn ssh -l root $ip
  expect "*password: "
  sleep 1
  send "westos\r"
  expect "root"
  send "scp root@172.25.0.251:/shell/check.sh /mnt\r"
  ###注意第一次连接会提示yes/no
  expect "pasword:"
  send "123456\r"
  expect eof
  }
  实例9:批量主机操作(不同密码)
  # cat passwd.txt
  192.168.2.60=westos
  192.168.2.70=redhat
  # cat hello.sh
  #!/bin/bash
  #for i in `cat passwd.txt`
  #do
  # ip=`echo $i | awk -F= '{print $1}'`
  # pass=`echo $i | awk -F= '{print $2}'`
  #done
  for ip in `awk -F= '{print $1}' passwd.txt`
  do
  pass=`awk -F= -v i="$ip" '{if(i==$1)print $2}' passwd.txt`
  expect login.exp $ip $pass
  done
  # cat login.exp
  #!/usr/bin/expect
  set IP [lindex $argv 0]
  set PASS [lindex $argv 1]
  spawn ssh wxh@$IP
  expect "(yes/no)?" {
  send "yes\r"
  expect "password:"
  send "$PASS\r"
  } "password:" { send "$PASS\r" } "* host" {exit 1}
  expect "$ "
  send "hostname;exit\r"
  expect eof


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-555150-1-1.html 上篇帖子: 我的shell练习 下篇帖子: shell学习总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表