zoukankan      html  css  js  c++  java
  • Linux shell 脚本(三)

    转载请标明出处: 
    http://blog.csdn.net/zwto1/article/details/45111547; 
    本文出自:【zhang_way的博客专栏】   


    九、使用case 分支

    语法格式:
    case 变量值 in 
    模式1)
       命令序列1
          ;;
    模式2)
        命令序列2
         ;;
    *)
        默认命令序列
    esac


    例子:
    case  控制参数 in
    start)
         启动XX服务
          ;;          #两个分号不能省略
    stop)
         停止XX服务
         ;;
    *)
         显示服务脚本的用法
    esac
    

    基本用法示例:

      1.识别用户击键类型 

    #!/bin/bash
    read -p "请输入一个字符,并按Enter 键确认:" KEY
    
    case "$KEY" in
      [a-z]|[A-Z])
         echo "你输入的是字母."
             ;;
       [0-9])
          echo "你输入的是数字"
             ;;
        *)
         echo "你输入的是空格、功能键或其他字符."
    esac
    

    结果如下图:


     2.目标:
       2.1 编写服务脚本sleepd
        能够响应start、stop控制参数
        将服务交给chkconfig进行管理

      如图:

           

           

            
       2.2 chkconfig处理
         在脚本开头设置chkconfig参数
         添加为系统服务
       
        在2.1上我们要添加 chkconfig参数配置
    #!/bin/bash 
    #<strong>chkconfig:  - 90 10</strong>


     #告诉chkconfig 我们这个脚本适用于那几个级别,切换到这个运行级别的进程启动顺序是90 ,停止这个进程顺序是  #10

     #description:Daemon script for sleepd Server

      ......

    chkconfig --add  sleepd #添加为系统服务
    chkconfig sleepd on # 开机自启动
    


    十、awk 文本处理工具

    shell 输出为"文本"
     面向过程,而非面向对象 
     命令是文本、输出也是文本
     查看内存信息:head -15 /pro/meminfo
     
    非交互处理方式:
    重定向、管道、命令替换
    head 、more、cut、tr
    grep、awk 、sed
     

    awk编程语言:

    数据处理引擎

    基于模式匹配检查输入
    将期望的结果print到屏幕
     
    awk基本命令格式:
    语法格式:awk '模式{操作}' 文件1 文件2 ......
    awk 'NR==1 {print}' /etc/hosts  #awk内建变量  将/etc/hosts第一行的文本输出
    常用的内建变量
    NR  当前处理行的序数(行号)
    FS  字段分隔,缺省为空格或tab位
    $n   当前行的第N个字段
    $0   当前行的所有文本段
     
    用法示例:
    准备测试文件:
    cat file.txt
    1 This is the first line
    2 Hello ,Everybody
    3 192.168.4.2 w2k8.benet.com
    4 hunter:x:504:504::/home/hunter:/bin/bash
     
    1.按行号输出文本
    如下图:

            
    2.使用比较运算

    awk '(NR%2)==1{print}'  file.txt    #输出所有的奇数行
    1 This is the first line
    3 192.168.4.2 w2k8.benet.com
     
    awk '(NR%2)==0{print}' fiie.txt   # 输出所有偶数行
     2 Hello ,Everybody
     4 hunter:x:504:504::/home/hunter:/bin/bash
     

    3.使用正则表达式:
     

    awk  '/2/{print}' file.txt  #输出包含数字2的行
     2 Hello ,Everybody
     3 192.168.4.2 w2k8.benet.com 
     
     awk '/bash $/{print}' file.txt #输出以bash结尾的行
     4 hunter:x:504:504::/home/hunter:/bin/bash
     

     4.指定分隔、指定输出字段 
      
    awk 'NR==2,NR==3{print $1,$3}' file.txt  #输出第2-3行的第1、3字段
      2 Hello
      3  192.168.4.2
          
      awk -F. '$5=="benet"{print $0}' file.txt #-F指定分隔符   输出以.分隔且第5字段为benet的整行
       3 192.168.4.2w2k8.benet.com   

    十一、sed文本处理工具

     sed 基本用法:
     输出文本
     删除及替换文本

     sed流式编辑器/文本过滤
     Stream Editor

     基于模式匹配过滤/修改文本


    语法格式: 

    sed '编辑指令' 文件1 文件2  ......   
    sed -n '编辑指令' 文件1  文件2 ......  #只把编辑指令影响的部分输出
    sed -i '编辑指令' 文件1 文件2 ......   # 直接修改文本内容  awk 不可以直接修改
    sed -n '3,5p'  /etc/hosts  #处理3到5行  p 代表print
     
    编辑指令的写法:
       格式:[地址1[,地址2]]操作类型
      多条指令之间以分号隔开
      sed -n '3p;5p' /etc/hosts #输出第3行,输出第5行

    最常用的操作类型:
    p  输出/打印文本行
    n  取下一行文本(跳过当前行)
    d   删除 
    s   字符串替换
    a  追加新的文本

    例子:
    准备测试文件:
      
    cat file.txt
    1 This is the first line
    2 Hello ,Everybody
    3 192.168.4.2 w2k8.benet.com
    4 hunter:x:504:504::/home/hunter:/bin/bash
     


    1. 隔行输出文本内容:
     
     sed -n 'p;n' file.txt         #输出所有奇数行
       1 This is the first line
       3 192.168.4.2 w2k8.benet.com
      
       sed -n 'n;p' file.txt  #输出所有偶数行
       2 Hello ,Everybody
       4 hunter:x:504:504::/home/hunter:/bin/bash
    

     
    2. 使用正则表达式:
     
     sed -n '/w2k8/,$p' file.txt  #输出从第1个包含w2k8的行到最后一行 
      3 192.168.4.2 w2k8.benet.com
      4 hunter:x:504:504::/home/hunter:/bin/bash
     
     sed -n '/<This>/p'  file.txt #输出包含单词This的行 
     1 This is the first line
     
     3.删除符合条件的行
     
    sed '2,3d' file.txt   #删除第2-3行文本
     1 This is the first line 
     4 hunter:x:504:504::/home/hunter:/bin/bash
     
     sed '/w32k8/d;$d' file.txt #删除包含w2k8的行和最后一行
     1 This is the first line
     2 Hello ,Everybody

     4.删除不符合条件的行
     
     sed  '/ne/!d' file.txt #删除不包含字符串ne的行
      1 This is the first line
      3 192.168.4.2 w2k8.benet.com
      
     5.替换符合条的文本
     
    sed '3,4s/hunter/BADBOY/g' file.txt  #将第3行到第4行的所有hunter替换为BADBOY
     1 This is the first line
     2 Hello ,Everybody
     3 192.168.4.2 w2k8.benet.com 
     4 BADBOY:x:504:504::/home/BADBOY/bin/bash

     6.替换的特殊效果   

    sed '1,2s/^/#/g' file.txt  # 在第1-2行的行首插入# 进行注释 ^: 行首 $:行尾  真的在源文件插入# ,要加-i 
    #1 This is the first line
    #2 Hello ,Everybody
      3 192.168.4.2 w2k8.benet.com
       4 hunter:x:504:504::/home/hunter:/bin/bash
     
     sed 's/ter//g' file.txt  #删除字符串ter(替换为空串)
     1 This is the first line
     2 Hello ,Everybody
     3 192.168.4.2 w2k8.benet.com
     4 hun:x:504:504::/home/hun:/bin/bash  
     

  • 相关阅读:
    python和搜索
    Flask---ajax(jquery)交互
    Flask--修改默认的static文件夹的方法
    Flask设计带认证token的RESTful API接口[翻译]
    Python 和 Flask实现RESTful services
    等差数列偶数被除2删除后的恢复问题(2018小马智行秋招计算机视觉第三道编程题)
    Leetcode 140 单词拆分II: 字符串s在字典wordDict中有多少种拆分方法。
    LeetCode 139 单词拆分:字符串s能否分割为字符串数组words(wordDict)中字符串的组合?(某未来公司面试题目)
    ROS时间概念总结:ros::Time、ros::Duration、定时器ros::Timer&ros::Rate
    ++i、i++、i+=1、i=i+1的区别
  • 原文地址:https://www.cnblogs.com/bigdata1024/p/8387451.html
Copyright © 2011-2022 走看看