免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Shell 求助
123下一页
最近访问板块 发新帖
查看: 3670 | 回复: 23
打印 上一主题 下一主题

求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-29 18:32 |只看该作者 |倒序浏览
本帖最后由 princeduan 于 2012-01-30 20:12 编辑

  1. #! /bin/sh

  2. PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/contrib/bin

  3. #awinfo.sh ?<output directory>?
  4. BASEDIR=${BASEDIR:-/home/nbc01/pfm}
  5. EXECDIR=${EXECDIR:-/home0500/ms/user/ms/unei/shell}
  6. NEXECDIR=${NEXECDIR:-/home0500/ms/user/ms/unei/exec}
  7. DEBUG=${DEBUG:-''}

  8. #1.debugging function
  9. run () {
  10.        if [ ”${DEBUG}” ]; then
  11.            echo $@
  12.         else
  13.                eval $@ > /dev/null 2>&1         
  14. fi
  15. }

  16. #2.logging function
  17. logging () {
  18. FILE=$1
  19. shift
  20. CMD=S@

  21. if [ ! "${CMD}" -o !"${FILE}" ]; then
  22.     return
  23. fi

  24. cat << _EOT_ >> ${FILE}
  25. `date +'%Y/%m/%d %H:%M:%S'`
  26. -----
  27. `eval ${CMD}`
  28. -----
  29. _EOT_
  30. }

  31. #$1: output directory
  32. case $# in
  33.     1)
  34.         BASEDIR=$1
  35.     ;;
  36.     0)
  37.         # use default basedir
  38.     ;;
  39.     *)
  40.         echo "usage: awinfo.sh [output directory]" 1>&2
  41.         exit 1
  42.     ;;
  43. esac

  44. #3.local commands

  45. if [ ${EXECDIR} -a -d ${EXECDIR} ]; then
  46.     PS_CMD=${EXECDIR}/ps.pl
  47. fi
  48. if [ ${NEXECDIR} -a -d ${NEXECDIR} ]; then
  49.     SEGSZ_CMD=${NEXECDIR}/getsegsz
  50. fi

  51. #4.get current date and time
  52. set `date +'%Y%m%d %H:%M'`
  53. DATE=$1
  54. HOURE=$2

  55. #5.logging files name
  56. OUTPUT_SWAPINFO=swapinfo.out
  57. OUTPUT_PS=ps.out
  58. OUTPUT_SEGSZ=getsegsz.out
  59. OUTPUT_VMSTAT=vmstat.out
  60. OUTPUT_BDF=bdf.out
  61. OUTPUT_NETSTAT=netstat.out

  62. #6.logging directory
  63. DIR=${BASEDIR}/${DATE}

  64. if [ "${BASEDIR}" -a ! -d "${BASEDIR}" ]; then
  65.     mkdir ${BASEDIR}
  66. fi

  67. if [ "${DIR}" -a ! -d "${DIR}" ]; then
  68.     mkdir ${DIR}
  69. fi

  70. #7.get some information
  71. logging ${DIR}/${OUTPUT_SWAPINFO}            swapinfo -tm

  72. if [ ${PS_CMD} -a -x ${PS_CMD} ]; then
  73. logging ${DIR}/${OUTPUT_PS}                  $PS_CMD
  74. fi

  75. if [ ${SEGSZ_CMD} -a -x ${SEGSZ_CMD} ]; then
  76. logging ${DIR}/${OUTPUT_SEGSZ}               $SEGSZ_CMD
  77. fi

  78. logging ${DIR}/${OUTPUT_VMSTAT}              vmstat -S

  79. if [ ! -f ${DIR}/${OUTPUT_BDF} ]; then
  80. logging ${DIR}/${OUTPUT_BDF}                 bdf
  81. fi

  82. logging ${DIR}/${OUTPUT_NETSTAT}             netstat -i

  83. #8.archiving other days log

  84. for d in ${BASEDIR}/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
  85. do
  86.     if [ "${d}" = "${DIR}" ]; then
  87.         continue
  88.     elif [ -d "${d}" ]; then
  89.          dpfx=`dirname ${d}`
  90.          dsfx=`basename ${d}`
  91.          cd ${dpfx}
  92.          run tar cvf ${dsfx}.tar $dsfx}
  93.          run gzip -f9 ${dsfx}.tar
  94.          run rm -rf ${dsfx}
  95.          find ${BASEDIR} -mtime +60 -exec rm {} \;
  96.      fi
  97. done
复制代码
终于完成了。我分成了8个段落,恳求高手能分段进行说明,简答几句话也可以。
补充说明,这个shell脚本是通过crontab自动执行的。DEBUG这个参数究竟做什么用啊?
先谢谢了!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2012-01-29 20:10 |只看该作者
回复 1# princeduan

置顶文
shell基础十二篇
shell 十三问?

论坛徽章:
0
3 [报告]
发表于 2012-01-29 21:04 |只看该作者
感谢回复,不过没有看到类似的说明。
能否帮忙简单解释一下?

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
4 [报告]
发表于 2012-01-29 21:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2012-01-29 21:35 |只看该作者
DEBUG=${DEBUG:-''}
这句中赋值方式怎么解释?是不是知道这个就好办了?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2012-01-29 22:01 |只看该作者
本帖最后由 jason680 于 2012-01-29 22:05 编辑

回复 3# princeduan


1. PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/contrib/bin
2. DEBUG=${DEBUG:-''}
1.没问题, 2有问题....
请看 shell 十三问, 8) $(( )) 与 $( ) 还有${ } 差在哪?

if [”${DEBUG}”]; then
明显语法错误,请先练好基础
shell基础十二篇, shell基础学习第十七篇-条件测试

eval $@ > /dev/null 2​​>&1
shell 十三问 , 11) > 与 < 差在哪?
eval ==> http://blog.chinaunix.net/space. ... =blog&id=105530   

论坛徽章:
0
7 [报告]
发表于 2012-01-29 22:10 |只看该作者
if [”${DEBUG}”]; then
明显语法错误,请先练好基础


这个是从服务器抄下来的,应该是正常工作的。

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
8 [报告]
发表于 2012-01-30 10:27 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2012-01-30 10:32 |只看该作者
本帖最后由 wsxedcer 于 2012-01-30 11:00 编辑

我擦,是我错了
  1. #!/bin/sh

  2. PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/contrib/bin
  3. DEBUG=${DEBUG:-''}
  4. #debugging function
  5. run () {
  6.        if [ "${DEBUG}" ]; then
  7.            echo $@
  8.         else
  9.                eval $@ > /dev/null 2>&1
  10. fi
  11. }
复制代码
DEBUG=${DEBUG:-''}  定义DEBUG的值,若 $DEBUG 没设定或为空值,输出但不取值 。(保留非空值)
if [ "${DEBUG}" ]; then  怎么没有看到你的有空格呢?  测试条件咯,测试是否为空值,
eval $@ > /dev/null 2>&1  这个比较长,eval 的用法自己查

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
10 [报告]
发表于 2012-01-30 10:34 |只看该作者
回复 7# princeduan


你们的服务器上第一行是用的中文输入法状态下的感叹号?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP