免费注册 查看新帖 |

Chinaunix

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

[文本处理] Shell脚本排版有规定格式,如何写的漂亮点! [复制链接]

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-03 21:55 |只看该作者 |倒序浏览
本帖最后由 djzhangxing 于 2014-09-03 21:57 编辑

下面是我写的shell摘了一段,我感觉没有别人写的漂亮,echo了,if、else是加tab还是空格呢,有规定格式,怎么能看的舒服点嫩?

  1. proxy_group ()
  2. {
  3. cat /dev/null > data1
  4. cat /dev/null > data2
  5. cat /dev/null > repeat.tmp
  6. cat /dev/null > data_proxy.tmp
  7. cat /dev/null > not_group.tmp
  8. cat /dev/null > disaffinity.tmp
  9. cat /dev/null > file
  10. cat /dev/null > data_proxy.data

  11. DB_CONNECT="mysql -uz_admin -p123 -P3306 -h0.0.0.0"
  12. $DB_CONNECT zabbix -Ne "SET names utf8;select distinct a.host,c.name from hosts as a,hosts_groups as b,groups as c where a.hostid=b.hostid and b.groupid=c.groupid and c.name like 'zabbix proxy%' and a.status=0;" >> data1
  13. $DB_CONNECT zabbix -Ne "SET names utf8;select distinct  yuan.host yuan_host, proxy.ip proxy_ip  from hosts yuan,hosts proxy where yuan.proxy_hostid = proxy.hostid and yuan.status=0;" >> data2

  14. `awk 'NR==FNR{a[$1]=$NF;next}{if($1 in a){if(a[$1]==$NF)print "same";else print "disaffinity",$1,$2,$3,$4}else print "not proxy_group",$1}' data1 data2|sort|grep -v "same" >>data_proxy.tmp`

  15. echo -e "服务器Proxy与Group不相同的IP" >> disaffinity.tmp
  16. `awk '/^disaffinity/{print $2}' data_proxy.tmp>> disaffinity.tmp`
  17. echo -e "\n服务器无Proxy组的IP" >>not_group.tmp
  18. `awk '/^not proxy_group/{print $3}' data_proxy.tmp>>not_group.tmp`

  19. echo -e "\n服务器非1个Proxy组的IP:" >> repeat.tmp
  20. `awk '{print $1}' data1 |sort|uniq -c|awk '{if($1 != 1){print $1,$2}else {print "OK"}}'|grep -v OK>> repeat.tmp`
  21. `cat disaffinity.tmp not_group.tmp repeat.tmp >> data_proxy.data`
  22. echo -e "\n"
  23. }
  24. proxy_group;
复制代码

论坛徽章:
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 [报告]
发表于 2014-09-03 22:16 |只看该作者
回复 1# djzhangxing

怎会没缩进呢?
亦没说明...

   

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
3 [报告]
发表于 2014-09-03 22:59 |只看该作者
嗯,说明这个有几个的,我删掉了,只是自己看,最大的问题是缩进,这个影响了视觉,缩进有规定格式吗?有简单的小范文吗?我看了下我们同事的,他们什么样子的都有
回复 2# jason680


   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
4 [报告]
发表于 2014-09-04 08:33 |只看该作者
一堆的 反引号 (``), 但结果没有存入任何变量.
超过5层的管道.
超过70个字符的单行代码.

看来, 楼主不是 码农 出身.

良好的代码格式化, 不是给机器看的, 是给人(自己)看的.
我一直很佩服那些可以写出超过300个字符单行命令的人.
因为我没有这个能力. 我只能写成多行, 必要时, 写成脚本.
我太笨了, 如果 有多组括号, 我就不知道差几个, 所以,一定要有缩进.
我喜欢 python的语法, 不是它有多优秀, 而是它强制缩进, 这样, 至少我能看明白一点别人写的代码.
perl就完了, 默认变量, 加上复杂的表达式, 基本上, 写过人才能维护了.

简单改了几个地方. 主要是上面那两串长的改了. 下面的 没改. 希望楼主能看明白我改的原因, 自己也可以搞定.
  1. proxy_group ()
  2. {
  3.     cat /dev/null > data1
  4.     cat /dev/null > data2
  5.     cat /dev/null > repeat.tmp
  6.     cat /dev/null > data_proxy.tmp
  7.     cat /dev/null > not_group.tmp
  8.     cat /dev/null > disaffinity.tmp
  9.     cat /dev/null > file
  10.     cat /dev/null > data_proxy.data

  11.     DB_CONNECT="mysql -uz_admin -p123 -P3306 -h0.0.0.0"

  12.     OPTS_1="SET names utf8;"
  13.     OPTS_1="${OPTS_1} select distinct a.host,c.name"
  14.     OPTS_1="${OPTS_1} from hosts as a, hosts_groups as b, groups as c "
  15.     OPTS_1="${OPTS_1} where a.hostid = b.hostid "
  16.     OPTS_1="${OPTS_1} and b.groupid = c.groupid "
  17.     OPTS_1="${OPTS_1} and c.name like 'zabbix proxy%' "
  18.     OPTS_1="${OPTS_1} and a.status = 0;"

  19.     $DB_CONNECT zabbix -Ne "${OPTS_1}" >> data1
  20.     OPTS_2="SET names utf8;"
  21.     OPTS_2="${OPTS_2} select distinct yuan.host as yuan_host, proxy.ip as proxy_ip"
  22.     OPTS_2="${OPTS_2} from hosts as yuan, hosts as proxy "
  23.     OPTS_2="${OPTS_2} where yuan.proxy_hostid = proxy.hostid "
  24.     OPTS_2="${OPTS_2} and yuan.status = 0;"

  25.     #$DB_CONNECT zabbix -Ne "SET names utf8;select distinct  yuan.host yuan_host, proxy.ip proxy_ip  from hosts yuan,hosts proxy where yuan.proxy_hostid = proxy.hostid and yuan.status=0;" >> data2
  26.     $DB_CONNECT zabbix -Ne "${OPTS_2}" >> data2

  27.     awk 'NR==FNR{
  28.                  a[$1]=$NF;
  29.                  next}
  30.                 {if($1 in a)
  31.                    {if(a[$1]==$NF)
  32.                       print "same";
  33.                     else print "disaffinity",$1,$2,$3,$4}
  34.                  else print "not proxy_group",$1}' data1 data2 | \
  35.          sort | \
  36.          grep -v "same" >>data_proxy.tmp

  37.     echo -e "服务器Proxy与Group不相同的IP" >> disaffinity.tmp
  38.     awk '/^disaffinity/{print $2}' data_proxy.tmp>> disaffinity.tmp
  39.     echo -e "\n服务器无Proxy组的IP" >>not_group.tmp
  40.     awk '/^not proxy_group/{print $3}' data_proxy.tmp>>not_group.tmp

  41.     echo -e "\n服务器非1个Proxy组的IP:" >> repeat.tmp

  42.     awk '{print $1}' data1 |\
  43.          sort|\
  44.          uniq -c|\
  45.          awk '{if($1 != 1){print $1,$2}else {print "OK"}}'|\
  46.          grep -v OK>> repeat.tmp

  47.     cat disaffinity.tmp not_group.tmp repeat.tmp >> data_proxy.data
  48.     echo -e "\n"
  49. }

  50. proxy_group
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2014-09-04 08:53 |只看该作者
回复 1# djzhangxing


    编辑器都有格式化的功能。

论坛徽章:
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
6 [报告]
发表于 2014-09-04 09:16 |只看该作者
Google’s Shell Style Guide - Style guides
https://google-styleguide.googlecode.com/svn/trunk/shell.xml

Advanced Bash-Scripting Guide: Scripting With Style
http://www.tldp.org/LDP/abs/html/unofficialst.html

以上内容可供参考。但是也不必完全照搬,比如他们推荐用两个空格缩进,但我就是喜欢用四个空格缩进。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
7 [报告]
发表于 2014-09-04 10:01 |只看该作者
回复 6# Shell_HAT


    不错。

    年轻人用两个,年纪大的用四个,老了用六个。

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
8 [报告]
发表于 2014-09-04 10:12 |只看该作者
回复 4# q1208c


    顶一个,我也是喜欢python的强制缩进,一开始写的时候各种难受,但习惯了就变成大爱

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
9 [报告]
发表于 2014-09-04 12:35 |只看该作者
回复 6# Shell_HAT

根本 python 编码的 建议, 是使用一个 tab 但要扩展成 4个空格做为缩进.

所以, vi里设置为 tabstop = 4, expandtab
   

论坛徽章:
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 [报告]
发表于 2014-09-04 13:16 |只看该作者
回复 9# q1208c


    是的。十几年前大学老师教我们用 Turbo C 的时候就是建议把tab设置为4space
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP