免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3993 | 回复: 14
打印 上一主题 下一主题

[学习共享] 小菜写的shell自动生成shell的注释 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-25 17:00 |只看该作者 |倒序浏览
本帖最后由 wsleichao3 于 2013-03-26 12:03 编辑

小菜练习写的一个脚本,用于生成shell脚本中的注释
  1. #!/bin/bash

  2. #功能:自动生成脚本的格式
  3. #时间:2013-03-28
  4. #版本:1.0
  5. #历史:
  6. #       2013-03-28      第一版

  7. #生成的脚本格式内容:
  8. #########################################################
  9. #       功能:……                                                                        #
  10. #       作者:……                                                                        #
  11. #       时间:……                                                                        #
  12. #       版本:……                                                                        #
  13. #       历史:……                                                                        #
  14. #########################################################

  15. #声明使用的变量
  16. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/user/local/sbin
  17. script_name=''
  18. script_function=''
  19. script_author=''
  20. script_version=''
  21. script_histoy=''
  22. script_time=$(date +%F)

  23. #引导用户设置相关变量
  24. read -p "输入生成脚本的名称(默认用时间命名,如${script_time}.sh):" script_name
  25. read -p "输入描述脚本的功能:" script_function
  26. read -p "输入该脚本的作者:" script_author
  27. read -p "输入该脚本的版本:" script_version
  28. read -p "输入改脚本的历史信息:" script_histoy

  29. #变量内容的替换,如果$script_name为空,则用时间填充(在这使用的变量的替换中变量为空和没有设置是不同的)。
  30. script_name=${script_name:-$script_time}\.sh

  31. script_histoy_fill="$script_time        第一版"

  32. if [ -f "$script_name" ];then
  33.         read -p "脚本名称:${script_name}以存在,是否覆盖?[y/n]" script_exist
  34.         if [ "$script_exist" == "n" ];then
  35.                 read -p "请重新输入脚本的名称:" script_name
  36.         fi
  37. fi

  38. script_histoy=${scipt_histoy:-$script_histoy_fill}

  39. cat >$script_name << END
  40. #!/bin/bash

  41. #功能:$script_function
  42. #时间:$script_time
  43. #作者:$script_author
  44. #版本:$script_version
  45. #历史信息:
  46.        $script_histoy

  47. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/user/local/sbin
  48. END
复制代码
cao627指点,对文件名称加个保险,请看注释
  1. #!/bin/bash

  2. #功能:自动生成脚本的格式
  3. #时间:2013-03-28
  4. #版本:1.0
  5. #历史:
  6. #        2013-03-28        第一版

  7. #生成的脚本格式内容:
  8. #########################################################
  9. #        功能:……                                        #
  10. #        作者:……                                        #
  11. #        时间:……                                        #
  12. #        版本:……                                        #
  13. #        历史:……                                        #
  14. #########################################################

  15. #声明使用的变量
  16. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/user/local/sbin
  17. script_name=''
  18. script_function=''
  19. script_author=''
  20. script_version=''
  21. script_histoy=''
  22. script_time=$(date +%F)

  23. #写成函数调用自己,解决文件命名重复问题
  24. function script_exist(){

  25.         #这里原来是script_name=${script_name:-$script_time}\.sh,如果输入的名称多次存在,就会在名称后累加.sh,例如*.sh,第二次就成了*.sh.sh
  26.         script_name=${script_name:-$script_time\.sh}

  27.         if [ -f "$script_name" ];then
  28.                 read -p "脚本名称:${script_name}以存在,是否覆盖?[y/n]" script_exist
  29.                 case $script_exist in
  30.                         "y")
  31.                                 #这里实在不知道怎么写好,目的就是检测到y时,程序继续往下走
  32.                                 script_name=$script_name
  33.                         ;;
  34.                         "n")
  35.                                 read -p "请重新输入脚本的名称:" script_name
  36.                                 #调用自己
  37.                                 script_exist
  38.                         ;;
  39.                         #默认动作和其他输入时进行调用自己
  40.                         *)
  41.                                 script_exist
  42.                         ;;
  43.                 esac
  44.         fi
  45. }

  46. #引导用户设置相关变量
  47. read -p "输入生成脚本的名称(默认用时间命名,如${script_time}.sh):" script_name
  48. read -p "输入描述脚本的功能:" script_function
  49. read -p "输入该脚本的作者:" script_author
  50. read -p "输入该脚本的版本:" script_version
  51. read -p "输入改脚本的历史信息:" script_histoy

  52. #进行文件名的检测,自定义函数
  53. script_exist


  54.        
  55. script_histoy_fill="$script_time        第一版"
  56. script_histoy=${script_histoy:-$script_histoy_fill}

  57. cat >$script_name << END
  58. #!/bin/bash

  59. #功能:$script_function
  60. #时间:$script_time
  61. #作者:$script_author
  62. #版本:$script_version
  63. #历史信息:
  64.        $script_histoy

  65. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/user/local/sbin
  66. END
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-03-25 17:06 |只看该作者
本帖最后由 wsleichao3 于 2013-03-25 17:32 编辑

还有一个脚本是根据抚琴煮酒大侠写的脚本稍微改动了下
这个脚本使用的sudo,没有直接使用root,是为了使用权限较大的命令时能够在日志中记录,sudo配置的时无密码的sudo。
  1. #!/bin/bash
  2. #脚本模仿“抚琴煮酒”的http://andrewyu.blog.51cto.com/1604432/1074650
  3. #脚本描述:
  4. #       对SSH和FTP的恶意连接的IP尝试次数大于10次以上进行屏蔽。
  5. #时间:2013-03-23


  6. #awk展开是
  7. #for(i=1;i<NF;i++){
  8. #       if($i~/rhost/&&$i!~/\//){
  9. #               ip=substr($i,7);
  10. #               if(ip~/^:/){
  11. #                       print substr(ip,8)
  12. #               }else{
  13. #                       print print ip
  14. #               }
  15. #       }
  16. #}
  17. sudo awk '{for(i=1;i<NF;i++){if($i~/rhost/&&$i!~/\//){ip=substr($i,7);if(ip~/^:/){print substr(ip,8)}else print ip}}}' /var/log/secure|sort|uniq -c >drop.ip


  18. cat drop.ip|while read A
  19. do
  20.         num=$(echo $A|awk '{print $1}');
  21.         ip=$(echo $A|awk '{print $2}');


  22.         if [ "$num" -ge "10" ];then
  23.                 sudo iptables -L -n|grep "$ip" >/dev/null
  24.                 if [ "$?" -ne "0" ];then
  25.                         echo "sudo iptables -I INPUT -s $ip -j DROP"
  26.                 fi
  27.         fi
  28. done
复制代码

论坛徽章:
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
3 [报告]
发表于 2013-03-25 17:09 |只看该作者
是否考虑在第40行前面加个判断,如果存在$script_name同名文件,则提示用户是否覆盖。

论坛徽章:
0
4 [报告]
发表于 2013-03-25 17:28 |只看该作者
回复 3# Shell_HAT

谢谢大侠指导,我修改下~
   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
5 [报告]
发表于 2013-03-25 18:20 |只看该作者
回复 1# wsleichao3


    问一下
第一楼的39到44行
  1. if [ -f "$script_name" ];then
  2.         read -p "脚本名称:${script_name}以存在,是否覆盖?[y/n]" script_exist
  3.         if [ "$script_exist" == "n" ];then
  4.                 read -p "请重新输入脚本的名称:" script_name
  5.         fi
  6. fi
复制代码
如果
read -p "请重新输入脚本的名称:" script_name
读到的”script_name“还是存在的怎么办?

是否有必要把外的层if 语句换成 wile语句?

论坛徽章:
1
射手座
日期:2014-03-10 14:24:52
6 [报告]
发表于 2013-03-25 18:49 |只看该作者
学习!~~~:wink:

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

论坛徽章:
0
8 [报告]
发表于 2013-03-26 10:03 |只看该作者
学习了,谢谢分享

论坛徽章:
0
9 [报告]
发表于 2013-03-26 12:04 |只看该作者
回复 5# cao627
大侠说的有道理,是我想的不够全面。我修改了下,麻烦过目下。还是在一楼


   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
10 [报告]
发表于 2013-03-26 16:42 |只看该作者
回复 9# wsleichao3

我觉得没必要用函数自我调用的方式来实习这个功能,直接写个while循环不是简单点吗?
  1. while [  -f "$script_name" ]
  2. do
  3. read -p "脚本名称:${script_name}以存在,是否覆盖?[y/n]" script_exist
  4. if [ "$script_exist" == "n" ];then
  5.   read -p "请重新输入脚本的名称:" script_name
  6. elif [ "$script_exist" == "y" ];then
  7.   break
  8. fi
  9. done
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP