Linux shell 脚本(三)

九、使用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  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Scala学习笔记(一)

    scala 无基本类型和包装类型之分 scala 方法: block内最后一行为返回值 没有返回值的方法写法:

    chaplinthink
  • scala开发环境安装

    java 运行环境 ,这里不详说了,熟悉java的朋友应该都会,我们主要关注下Scala的安装。

    chaplinthink
  • Sqoop工具

    SQOOP是用于对数据进行导入导出的。 (1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、HBase中 (2)把HDFS、H...

    chaplinthink
  • 迈向库尔德语的有限状态形态学(CS CL)

    形态分析是对词的形成和结构的研究。它在自然语言处理(NLP)和计算语言学(CL)的各种任务(例如机器翻译以及文本和语音生成)中起着至关重要的作用。库尔德语是一种...

    刘子蔚
  • Linux 下按照文件大小查找文件

    我想大概是这种情况,你的Linux 机器下磁盘满了,需要清理,然后就需要查找大的文件,确定是否有用进行删除。

    技术小黑屋
  • Android爬坑之旅:软键盘挡住输入框问题的终极解决方案

    开发做得久了,总免不了会遇到各种坑。 而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑——来来来,我们慢慢看。

    用户2802329
  • SAP gateway系统和后台系统的OData双重cache机制

    两个table用前面的前缀/BEP: backend和/FND: frontend区分

    Jerry Wang
  • SAP gateway系统和后台系统的OData双重cache机制

    /IWFND/CACHE_CLEANUP /IWBEP/CACHE_CLEANUP

    Jerry Wang
  • JS数组递归——构建 element 级联选择器树形数据

    通常,我们前端在开发管理后台的时候,会选择 vue+element 这样的技术栈去实现。但我们后端给的数据格式通常并不符合 element 的参数数据要求。比如...

    FungLeo
  • OpenNF-支持网络功能控制创新

    作者简介:刘宏岩,福州大学数计学院2016级计算机科学与技术(实验班)本科生,主要研究方向为软件定义网络SDN、网络功能虚拟化NFV。

    SDNLAB

扫码关注云+社区

领取腾讯云代金券