转载请标明出处: 

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
 

Linux shell 脚本(三)的更多相关文章

  1. 老李分享:《Linux Shell脚本攻略》 要点(三)

    老李分享:<Linux Shell脚本攻略> 要点(三)   1.生产任意大小的文件 [root@localhost dd_test]#[root@localhost dd_test]# ...

  2. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  3. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  4. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  5. Linux Shell脚本入门--cut命令

    Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...

  6. Linux Shell脚本攻略

    -Linux Shell脚本攻略 总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理 ...

  7. 老李分享:《Linux Shell脚本攻略》 要点(七)

    老李分享:<Linux Shell脚本攻略> 要点(七)   1.显示给定文件夹下的文件的磁盘适用情况 [root@localhost program_test]# du -a -h ./ ...

  8. 读《Linux Shell脚本攻略》(第2版) 总结

    前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 说下这本书的难度吧.纯新手或者只懂少部分编程知识的人,读起来还是有很大难度的.以我为 ...

  9. 【学习】Linux Shell脚本编程

    1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...

  10. linux ——shell 脚本

                                                      linux—shell 脚本  精简基础                 2018/10/30 13 ...

随机推荐

  1. bzoj 3048[Usaco2013 Jan]Cow Lineup 思想,乱搞 stl

    3048: [Usaco2013 Jan]Cow Lineup Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 237  Solved: 168[Subm ...

  2. MyCat 读写分离,负载均衡

    docker mysql 主从复制 配合Spring 事务 注意事项 配置好JRE,安装好MYCAT 在mysql主库创建表,会同步到从库 CREATE TABLE `user` ( `id` ) N ...

  3. HttpClient调用RestFul接口(post和get方式)

    /** * @version V1.0 * @Description 调用http接口工具类 * @Author pc * @Date 2018/3/2 11:03 */public class Ht ...

  4. js随机出现2个数字

    1和2 随机出现 <script type="text/javascript"> $(function(){ if (Math.random()>0.5) { c ...

  5. Linux显示内存统计最大和最小的详情

    Linux显示内存统计最大和最小的详情 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ free -l total used free shared buffe ...

  6. SPOJ D-QUERY

    以前主席树学  kungbin 最近看了网上的版本 终于发现和我以前学的线段树差不多的了 希望最近能够加强 #include<bits/stdc++.h> using namespace ...

  7. Spring Boot 文件上传

    其实网上已经有很多这样的文章了.为什么我还要记录一下呢?原因是在工作中对接外系统时,碰到了他们调取我们文件上传接口确存在着http请求头部规范的情况,从而导致用传统方法获取不到参数.今天就来整理下Sp ...

  8. shiro的登陆认证(shiro项目中来的一)

    一,图解 二,流程 2.1,创建token令牌,token中有用户提交的认证信息即账号和密码 Subject subject = SecurityUtils.getSubject(); Usernam ...

  9. MFC,ADO方式实现数据库操作

    参考: MSDN数据访问编程 (MFC/ATL): https://msdn.microsoft.com/zh-cn/library/kd4ck1tt.aspx?f=255&MSPPError ...

  10. 用VSCode开发一个asp.net core 2.0+angular 5项目(4): Angular5全局错误处理

    第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三 ...