免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 刺客阿地
打印 上一主题 下一主题

[其他] 【有奖讨论】linux操作系统工作利器:shell编程知多少? [复制链接]

论坛徽章:
10
CU大牛徽章
日期:2013-09-18 15:20:48程序设计版块每日发帖之星
日期:2016-07-21 06:20:00IT运维版块每日发帖之星
日期:2015-07-30 09:40:01技术图书徽章
日期:2014-10-14 16:00:43天蝎座
日期:2013-09-27 17:41:29CU大牛徽章
日期:2013-09-18 15:21:17CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:20:58每日论坛发贴之星
日期:2016-07-21 06:20:00
51 [报告]
发表于 2015-06-25 10:14 |只看该作者
#!/bin/sh
postqueue -p | grep $1 | cut -c 1-12 | xargs -n 1 postsuper -d


用户弱密码被人攻破,队列中暴多的垃圾邮件,用以上脚本可以删除postfix中指定来源的邮件

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
52 [报告]
发表于 2015-06-25 13:18 |只看该作者
无他 唯手熟尔!

论坛徽章:
0
53 [报告]
发表于 2015-06-25 13:47 |只看该作者
严重帮顶

论坛徽章:
39
双子座
日期:2014-08-06 17:37:19极客徽章
日期:2016-12-07 14:03:402017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之新疆
日期:2017-03-24 16:36:1915-16赛季CBA联赛之江苏
日期:2017-04-26 17:19:08黑曼巴
日期:2018-03-07 18:56:5615-16赛季CBA联赛之八一
日期:2018-03-09 10:44:1015-16赛季CBA联赛之江苏
日期:2018-03-12 15:12:1915-16赛季CBA联赛之青岛
日期:2018-03-16 09:13:0515-16赛季CBA联赛之山东
日期:2018-04-27 18:23:0515-16赛季CBA联赛之新疆
日期:2018-05-04 11:29:30
54 [报告]
发表于 2015-06-26 17:13 |只看该作者
1、请分享你是如何学习bash shell的?入门主要看过哪些书?
没有系统的学习过bash    

入门的时候  就看了man手册(基本语法)    和正则表达式必知必会


2、请分享你在工作当中编写过的一个shell脚本实例。
ubuntu下安装zabbix

  1. #!/bin/bash
  2. server_ip=`ifconfig|grep -oP '(?<=inet addr:)\S+'|head -1`
  3. Hostname=`cat /etc/hostname`
  4. user_name=`whoami`
  5. if [ $user_name != root ];then
  6. echo "请切换到root用户下执行"
  7. exit 0
  8. fi

  9. #切到/tmp目录下
  10. cd /tmp

  11. #下载安装包
  12. if [ ! -f zabbix-2.4.3.tar.gz ];then
  13. echo "zabbix安装包不存在,尝试下载中..."
  14. wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.4.5/zabbix-2.4.5.tar.gz
  15. if [ ! -f zabbix-2.4.3.tar.gz ];then
  16. echo "安装包下载失败,退出安装"
  17. exit 0
  18. fi
  19. fi
  20. md5=`md5sum zabbix-2.4.3.tar.gz |awk '{print $1}'`
  21. if [ $md5 != e8a0699c4e49999a15c63650a2280600 ];then
  22. echo "文件的md5值不一致"
  23. exit 1
  24. fi
  25. if [ ! -f libxml2-2.6.23.tar.bz2 ];then
  26. echo "libxml2安装包不存在,尝试下载中..."
  27. wget http://down1.chinaunix.net/distfiles/libxml2-2.6.23.tar.bz2
  28. if [ ! -f libxml2-2.6.23.tar.bz2 ];then
  29. echo "安装包下载失败,退出安装"
  30. exit 0
  31. fi
  32. fi
  33. command -v make >/dev/null 2>&1 || apt-get -y install make
  34. command -v gcc >/dev/null 2>&1 || apt-get -y install gcc
  35. #先设置mysql密码,为了后面安装mysql时不需要手动输入
  36. echo -e "debconf mysql-server/root_password password yunrun\ndebconf mysql-server/root_password_again password yunrun">/tmp/mysql-passwd
  37. debconf-set-selections /tmp/mysql-passwd

  38. #安装和配置PHP环境
  39. apt-get install make cmake gcc g++ autoconf apache2 php5 php5-gd php5-ldap php5-xmlrpc php5-mysql mysql-server-5.5 libmysqlclient-dev libxml2 libcurl4-openssl-dev snmp libsnmp-dev -y
  40. #安装中文环境
  41. apt-get -y install language-pack-zh-han*
  42. sed -i 's/post_max_size = 8M/post_max_size = 16M/g;s/max_execution_time = 30/max_execution_time = 300/g;s/max_input_time = 60/max_input_time = 300/g;s/;date.timezone =/date.timezone = Asia\/Shanghai/g' /etc/php5/apache2/php.ini

  43. #源码安装libxml2,因为apt-get源安装的libxml2不能在/usr/local/lib/目录下生成libxml2*等模块
  44. tar jxvf libxml2-2.6.23.tar.bz2
  45. cd libxml2-2.6.23/
  46. sed -i 's#O_WRONLY)#O_WRONLY,0777)#g' nanohttp.c
  47. ./configure
  48. make
  49. make install
  50. cd /tmp

  51. #安装zabbix
  52. useradd zabbix
  53. tar zxvf zabbix-2.4.3.tar.gz
  54. cd zabbix-2.4.3/
  55. ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2
  56. make install
  57. cd /tmp

  58. #判断源码安装是否成功
  59. if [ ! -d /usr/local/zabbix ];then
  60. echo "源码安装zabbix失败,退出安装"
  61. exit 1
  62. fi

  63. #sql语句
  64. data_import="
  65. create database zabbix character set utf8;
  66. grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
  67. flush privileges;
  68. use zabbix;
  69. source /tmp/zabbix-2.4.3/database/mysql/schema.sql;
  70. source /tmp/zabbix-2.4.3/database/mysql/images.sql;
  71. source /tmp/zabbix-2.4.3/database/mysql/data.sql;"

  72. #数据库配置,新安装的mysql密码为yunrun
  73. mysql -uroot -p'yunrun' -e "${data_import}"

  74. #拷贝网页程序代码
  75. mkdir /var/www/zabbix
  76. cp -r /tmp/zabbix-2.4.3/frontends/php/* /var/www/zabbix
  77. chown -R www-data:www-data /var/www/zabbix
  78. sed -i '/zh_CN/s/false/true/' /var/www/zabbix/include/locales.inc.php

  79. #修改zabbix安装目录权限
  80. chown -R zabbix.zabbix /usr/local/zabbix/
  81. #创建软链接
  82. ln -s /usr/local/zabbix/bin/* /usr/local/bin
  83. ln -s /usr/local/zabbix/sbin/* /usr/local/sbin
  84. #设置开机启动
  85. cp zabbix-2.4.3/misc/init.d/debian/zabbix-server /etc/init.d/
  86. update-rc.d zabbix-server defaults
  87. cp zabbix-2.4.3/misc/init.d/debian/zabbix-agent /etc/init.d/
  88. update-rc.d zabbix-agent defaults

  89. #修改zabbix-server.conf
  90. sed -i 's/DBUser=root/DBUser=zabbix/g;s/# DBPassword=/DBPassword=zabbix/g' /usr/local/zabbix/etc/zabbix_server.conf

  91. #修改zabbix-agentd.conf
  92. sed -i "s/# EnableRemoteCommands=0/EnableRemoteCommands=1/g;s/Server=127.0.0.1/Server=$server_ip/g;s/ServerActive=127.0.0.1/ServerActive=$server_ip/g;s/Hostname=Zabbix server/Hostname=$server_ip/g" /usr/local/zabbix/etc/zabbix_agentd.conf

  93. #修改zabbix-agent.conf
  94. sed -i "s/Server=127.0.0.1/Server=$server_ip/g" /usr/local/zabbix/etc/zabbix_agent.conf


  95. #配置sendemail
  96. wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
  97. sed -i 's@# AlertScriptsPath=${datadir}/zabbix/alertscripts@AlertScriptsPath=/usr/local/zabbix/alertscripts@' /usr/local/zabbix/etc/zabbix_server.conf
  98. tar xvf sendEmail-v1.56.tar.gz -C /usr/local/
  99. mv /usr/local/sendEmail-v1.56/ /usr/local/sendEmail
  100. mkdir /usr/local/zabbix/alertscripts
  101. echo '#!/bin/bash
  102. # $1 recipient
  103. # $2 subject
  104. # $3 content
  105. smtp=smtp.163.com
  106. user=urundata@163.com
  107. password=yunrun2015
  108. /usr/local/sendEmail/sendEmail -f $user -s $smtp -xu $user -xp $password -u $2 -m $3 -t $1 > /dev/null 2>&1 ' >> /usr/local/zabbix/alertscripts/sendemail.sh
  109. chmod a+x /usr/local/zabbix/alertscripts/sendemail.sh
  110. chown -R zabbix.zabbix /usr/local/zabbix/alertscripts/
  111. cp /usr/local/zabbix/alertscripts/sendemail.sh /usr/local/zabbix/share/zabbix/alertscripts/



  112. #启动
  113. chown -R www-data.www-data /var/www/zabbix/
  114. mv /var/www/zabbix /var/www/html
  115. /etc/init.d/zabbix-server start
  116. /etc/init.d/zabbix-agent start
  117. #重启apache
  118. /etc/init.d/apache2 restart
复制代码

3、对于新手编写shell脚本应该注意哪些方面?
使用绝对路径..   语法标准等等
4、在工作当中,shell脚本主要运用在哪些方面?
一般都是做一些重复 又没有变数的事情

5、shell板块最活跃的两种文本处理工具sed和awk,各位CU大牛畅谈下运用经验吧。
这2个我是个渣渣     给不了运用经验    只能说  这2个工具很牛B




论坛徽章:
15
2015七夕节徽章
日期:2015-08-21 11:06:172017金鸡报晓
日期:2017-01-10 15:19:56极客徽章
日期:2016-12-07 14:07:30shanzhi
日期:2016-06-17 17:59:3115-16赛季CBA联赛之四川
日期:2016-04-13 14:36:562016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-01-28 06:20:0015-16赛季CBA联赛之新疆
日期:2016-01-25 14:01:34IT运维版块每周发帖之星
日期:2016-01-07 23:04:26数据库技术版块每日发帖之星
日期:2016-01-03 06:20:00数据库技术版块每日发帖之星
日期:2015-12-01 06:20:00IT运维版块每日发帖之星
日期:2015-11-10 06:20:00
55 [报告]
发表于 2015-06-28 21:25 |只看该作者
1、请分享你是如何学习bash shell的?入门主要看过哪些书?
最初看IBM developer上的shell编程的系列文章入门,后续主要是靠Google边查边学

2、请分享你在工作当中编写过的一个shell脚本实例。
脚本编写的太多了,如启动服务的脚本,参考linux本身init.d目录下的原有脚本修改

3、对于新手编写shell脚本应该注意哪些方面?
感觉没啥注意的,唯一要注意的对线上系统要谨慎操作(最好复制线上系统操作无误后再操作),避免事故发生

4、在工作当中,shell脚本主要运用在哪些方面?
主要是一些服务监控和启停的脚本,其它的是一些运维的基础脚本,如同时操作100个机器执行某条命令

5、shell板块最活跃的两种文本处理工具sed和awk,各位CU大牛畅谈下运用经验吧。
这个说句实话,sed用的比较少,awk也是主要处理结果用,没啥经验的,都是简单应用

论坛徽章:
0
56 [报告]
发表于 2015-07-01 13:22 |只看该作者
入门linux看的是《鸟哥的私房菜》,也是网络同志们推荐的。由于是初学,对里面的内容还不太熟悉。目前正在通过此网站努力学习中。 这是一个不错的网站

论坛徽章:
2
水瓶座
日期:2014-06-12 08:22:39IT运维版块每日发帖之星
日期:2015-08-05 06:20:00
57 [报告]
发表于 2015-07-11 15:10 |只看该作者
1、请分享你是如何学习bash shell的?入门主要看过哪些书?
       学习Linux的bash shell这个经历对于我来说,其实还是一个非常漫长的事情,在我大学刚刚及接触Linux操作系统的时候,我对于Linux的命令行还是非常感兴趣,在学校的课余时间都在仔细的研读Linux的脚本的书,一边看书一边敲到电脑中运行尝试,慢慢的锻炼自己。在工作的时候,有时候有些项目我自己也会编写一些小的脚本工具来进行快捷编译。提高工作质量。
     入门看过《鸟哥的私房菜》 《Linux shell入门》

2、请分享你在工作当中编写过的一个shell脚本实例。
    cd( )
{
    # 检查写但参数的数目,分别对0或1个参数,2个参数,其他进行处理
    case "$#" in
        # 如果有1个或者0个参数,采用原有cd的处理方式,注意|的使用,表示这两种情况之一匹配即可。
        0 | 1)  builtin cd $1 ;;
        # 对于2个参数,将当前路径所有匹配参数1样式的字符串更换为样式2,并跳到新的路径中
        2    ) newdir=${PWD//$1/$2}
                # 这里给了一个case嵌套的例子。如果更换的路径和原来一样,即没有变化的处理,以及其他(即有更改)的处理。
                case "$newdir" in
                    $PWD)   echo "bash: cd: bad substitution" >&2 ;
                        return 1 ;;
                    *   )   builtin cd "$newdir" ;;
                esac ;;
        # 对参数多与2个处理。
        *    )  echo "bash: cd: wrong arg count" 1>&2 ; return 1 ;;
    esac
}

3、对于新手编写shell脚本应该注意哪些方面?
      1.掌握基本的shell脚本知识
      2.注意编程的规范,虽然shell脚本可以根据自己的习惯来设计模式,但是一些基本的规则还是需要注意的。
      3.注意注释,因为shell脚本不仅是要自己阅读的。

4、在工作当中,shell脚本主要运用在哪些方面?
      通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。

5、shell板块最活跃的两种文本处理工具sed和awk,各位CU大牛畅谈下运用经验吧。
       普通的行处理任务用sed很好,因为命令很简洁。
       awk最好的部分是它按“列”或“字段”处理的方式和“关联数组”,但awk对正则表达式支持的程度比sed要差些

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00
58 [报告]
发表于 2015-07-11 22:01 |只看该作者
刺客妹子好,哈哈,猜猜我是谁?

论坛徽章:
4
IT运维版块每日发帖之星
日期:2015-08-19 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-28 06:20:00IT运维版块每周发帖之星
日期:2015-09-11 19:20:31
59 [报告]
发表于 2015-07-13 17:52 |只看该作者
本期话题:

1、请分享你是如何学习bash shell的?入门主要看过哪些书?

看书,练习编程,用优化的思路,批处理的角度,解决系统运维中的问题。

我看的资料很旧了,因为太早了。看过两大本的《UNIX技术大全》,还看过一些下载的有关shell编程、sed、awk、正则表达式的电子档,为了省钱,没买多少纸质图书。


2、请分享你在工作当中编写过的一个shell脚本实例。
  1. ora9.monthbak.sh v3说明:

  2. 1. 本脚本是之前备份脚本的升级版。

  3. 2. 本脚本备份指定目录的NFS Server(Oracle RMAN备份数据)数据到指定月归档目录,备份后的文件格式为TAR压缩文件“*.tar.gz”,压缩文件名以备份时间为区别。缺省备份文件为一个压缩文件,也可以将备份文件备份成多个2000MB大小的分卷压缩文件(见#注释项)。

  4. 分卷压缩是用tar + split命令实现的,如果选择分卷压缩,解压方式可参考下列形式:
  5. #cat *.tar.gz* |tar -xzv

  6. 3. 本脚本应设置为当前月第一天执行,只备份上一个月的最后一次全备,无论全备数据是具体哪一天(包括跨年数据),如果上个月无全备数据,则提示备份失败。所有备份操作会记录在LOG_FILE文件中。

  7. 4. 实际备份时,请根据情况,修改具体备份目录,如:TAR_DIR、BAK_DIR、LOG_DIR等,及相关文件名信息,如:DBSID、LOG_FILE等。

  8. 5. 请将下列脚本复制到NFS Server上,修改、测试和运行。


  9. #!/bin/sh

  10. # backup script version 3

  11. #get today time info
  12. TODAY_FILE_TIME=`date '+%Y.%m.%d_%H.%M'`

  13. #get last month date
  14. LASTMON_DATE=`date -d "1 month ago" '+%Y%m'`

  15. #the date of lastest full backup
  16. LASTMON_FULLBK_DATE=""

  17. #database sid
  18. DBSID=ORA9

  19. #tar file path
  20. TAR_DIR="/monthbak/ora9"

  21. #bak file path
  22. BAK_DIR="/home/nfs.ora.bk"

  23. #log file path
  24. LOG_DIR="/monthbak"

  25. #log file name
  26. LOG_FILE="$LOG_DIR/monthbak.$DBSID.v3.log"

  27. echo "" >>$LOG_FILE
  28. echo "--------------------------------------------------------" >>$LOG_FILE
  29. echo "MONTH BACKUP: $(date '+%Y/%m/%d %H:%M:%S')" >>$LOG_FILE
  30. echo "" >>$LOG_FILE

  31. cd $BAK_DIR

  32. #get the date of latest full backup
  33. LASTMON_FULLBK_DATE=`ls -1 $DBSID*FULL_$LASTMON_DATE*.ORABK | sed -e '$!d'  -e 's/.*\(20[0-9]\{6\}\).*/\1/g'`
  34. #LASTMON_FULLBK_DATE="fake_str"

  35. if  [ $LASTMON_FULLBK_DATE ]
  36. then
  37.         #echo $LASTMON_FULLBK_DATE

  38.         echo "BAK file path: $(pwd)" >>$LOG_FILE

  39.         echo "File Contents:" >>$LOG_FILE
  40.         echo "" >>$LOG_FILE
  41.         ls -la $DBSID*FULL*$LASTMON_FULLBK_DATE*.ORABK >>$LOG_FILE
  42.         #ls -la $DBSID*FULL*$LASTMON_FULLBK_DATE*.ORABK

  43.         echo "" >>$LOG_FILE

  44.         BKBeginTime="Backup begin time: "`date`

  45.         echo "Tar file path: $TAR_DIR" >>$LOG_FILE
  46.         echo "Tar processing..." >>$LOG_FILE
  47.         echo "" >>$LOG_FILE

  48.         tar cvzf $TAR_DIR/${DBSID}_monbk_$TODAY_FILE_TIME.tar.gz $DBSID*FULL*$LASTMON_FULLBK_DATE*.ORABK >>$LOG_FILE

  49.         # sub-volume compression
  50.         #tar cvzf - $DBSID*FULL*$LASTMON_FULLBK_DATE*.ORABK |split -b 2000m -d - $TAR_DIR/${DBSID}_monbk_$TODAY_FILE_TIME.tar.gz >>$LOG_FILE

  51.         if [ $? -eq 0 ]
  52.         then
  53.                 BKEndTime="Backup end time: "`date`
  54.                 echo "" >>$LOG_FILE

  55.                 echo "Backup was successful." >>$LOG_FILE
  56.                 echo "" >>$LOG_FILE
  57.                 echo $BKBeginTime >>$LOG_FILE
  58.                 echo $BKEndTime >>$LOG_FILE
  59.         else
  60.                 echo "" >>$LOG_FILE
  61.                 echo "Backup failed" >>$LOG_FILE
  62.         fi

  63. else
  64.         echo "Could not find any file need to be backed up, processing stopped."  >>$LOG_FILE
  65. fi
复制代码
3、对于新手编写shell脚本应该注意哪些方面?

几点:
1) 熟悉各种unix命令,特别是sed、awk(这其实不是命令,相当于两个解释性语言);shell脚本是unix命令和工具的组合,不懂命令和工具,再熟悉语法,然并卵;
2)熟悉shell语法,注意语言细节和弱项(shell比C语言弱多了,它的特点不是语言的强大,而是命令组合的强大);
3)注意结构化编程;变量命名的规范化;加注释;
4)思路要明确,一个大脚本要从分离的小功能、小脚本试起,试通了再组合调试;
5)脚本中加入调试代码,或设置日志记录功能(日志很好的);
6)多看看高手写的脚本,有时间要深入理解;多和网友们讨论,不耻下问;


4、在工作当中,shell脚本主要运用在哪些方面?

数据采集,数据格式化,数据分析,运维自动化。

5、shell板块最活跃的两种文本处理工具sed和awk,各位CU大牛畅谈下运用经验吧。

对正则表达式要熟,而且正则表达式在sed和awk中的用法有细微的差别。

多写,多练,多用,如果不常用的话,最好注释一下,因为时间长了,语法生了,自己写的也看不懂了,我现在就这样。(当然了,我现在一个业务员,写个鸟脚本啊?)

论坛徽章:
4
IT运维版块每日发帖之星
日期:2015-08-04 06:20:00IT运维版块每日发帖之星
日期:2015-10-10 06:20:002015亚冠之阿尔艾因
日期:2015-11-08 10:27:01CU十四周年纪念徽章
日期:2020-11-05 14:10:23
60 [报告]
发表于 2015-07-15 11:32 |只看该作者
1、请分享你是如何学习bash shell的?入门主要看过哪些书?
     多看书,多动手实践,主要看的书有<<LINUX与UNIX SHELL编程指南>> <<linux_advanced_technology>><<Unix环境高级编程>>等
2、请分享你在工作当中编写过的一个shell脚本实例。
一个批量插入数据库得脚本
   i=0
while [ $i -ne 300 ];do
        cat bulk_insert_test.sql|sqlplus billing/billing@orcl
        i=`expr $i + 1`
        echo $i
done
3、对于新手编写shell脚本应该注意哪些方面?
     多写,写完一定要测试,大的脚本,可以先部分实现,再组合在一块,可以用echo 把关键的变量打出来
4、在工作当中,shell脚本主要运用在哪些方面?
     监控,调度,定时起停,安装部署等等
5、shell板块最活跃的两种文本处理工具sed和awk,各位CU大牛畅谈下运用经验吧。
     sed和awk功能非常强大,每个都可以单独写成书,sed对文件进行删除,替换,增加等,对列的处理不如awk.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP