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  
 

發佈了64 篇原創文章 · 獲贊 86 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章