轉載請標明出處:
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