初步學完shell腳本編程,經過這篇博客對其小結一下python
shell定義:shell實際上是一個命令解釋器,它的做用是解釋用戶輸入的命令和程序shell
shell腳本:咱們能夠在文本中輸入一系列的命令、控制語句和變量,這一切有機的結合起來就造成了功能強大的shell腳本。編程
經常使用的是bash解釋器bash
bash xx.sh編輯器
sh xx.sh函數
./xx.sh(注意是否有權限,沒有經過chmod 755 xx.sh 或chmod u+x xx.sh 添加權限)工具
$HOME 家目錄字體
$PWD 當前目錄 spa
$SHELL 解釋器路徑命令行
$USER 用戶
變量名=變量值 注意等號兩邊沒有空格
撤銷變量 unset 變量名
readonly 變量名=變量值(declare -r 變量名=變量值)
靜態變量不能撤銷,關機或運行完腳本自動失效
變量名=變量值
export 變量名
$n
n爲數字,$0表明該腳本名稱,$1-$9表明第一到第九個命令行參數,第十個及之後的參數須要用大括號包含,如${10}
$#
獲取全部輸入參數的個數
$@ 和$*
$@和$*都表示命令行中全部的參數,通常看來沒有區別,for循環打印時都是一個個打印,但當用雙引號分別將他們括起來,"$@"是分裂的,不是一個總體(for i in "$@"),而「$*」是一個總體
$?
最後一次執行命令的返回狀態,若是值爲0,證實命令執行正確,非0命令執行不正確
注意:函數中,函數的返回值只能有$?獲取,且返回值小於等於255。單獨比較大小時,結果也是由$?獲取
第一種方式:$((運算式))和$[運算式],運算符之間有沒有空格無所謂
第二種方式:`expr 變量1 +-*/% 變量2` 運算符之間有空格 ,要加反引號
[ condition ] 條件與兩端括號之間有空格
大小判斷
-lt 小於
-le 小於等於
-ge 大於等於
-gt 大於
-eq 等於
-ne 不等於
文件類型判斷
-f 文件存在且是一個常規文件
-e 文件存在
-d 文件存在是一個目錄
文件權限
-r 有讀的權限
-w 有寫的權限
-x 有執行的權限
多條件判斷
&& 與
|| 或
!邏輯否
if [ 條件判斷式 ];then
fi
if [ 條件判斷式 ]
then
fi
if [ 條件判斷式 ]
then
else
fi
if [ 條件判斷式 ]
then
elif [ 條件判斷式 ]
then
fi
case $變量名 in
「值1」)
程序
;;
「值2」)
程序
;;
*)
都不是
;;
esac
for 循環
for ((初始值;條件;;變量變化))
do
程序
done
for 變量 in 值1 值2 值3
do
程序
done
while 循環
while [ 條件判斷式 ]
do
程序
done
read(選項)(參數) 變量
讀取輸入賦值給變量
-p 指示讀取值時的提示符
-t 指定讀取值時等待的時間
read至關於python中的input
read -t 7 -p 「enter your choice」 NAME
basename [string/pathname]
basename [string/pathname] [suffix]
basename 會只保存路徑的最後一項,只剩文件名
dirname函數與basename做用相反,截取內容相反
獲取執行腳本的路徑
pw=$(cd `dirname $0`;pwd)
[function] funcname[()] function ,()可寫可不寫
{
程序
[return xx]
}
返回值由$?獲取,返回值(0-255)
注意:必須在調用函數地方以前,先聲明函數
一個腳本使用另外一個腳本的函數
. 腳本名
函數名
cut 命令從文件的每一行剪切字節,字符等數據,並將符合的數據輸出
cut [選項參數] filename
默認分隔符是製表符
參數 -f 提取第幾列
-d 分隔符 按照指定分割符分割列
2.sed
sed是一種流編輯器,它一次處理一行內容把當前處理的行存儲在臨時緩衝區中,稱爲模式空間,接着用sed 命令處理緩衝區中的內容,處理完成後,把緩衝區中的內容送往屏幕
接着處理下一行,這樣不斷重複,知道文件末尾,注意文件的內容沒有被改變,除非你使用重定向存儲輸出
sed [選項參數] 命令 filename
選項參數
-e 有多個命令時使用
-n 只顯示處理過的行
命令參數
a 新增
d 刪除
s 查找並替換
sed -n '1,/內容/'p 文件 顯示第一行到包含匹配內容的那一行
sed -n 'num'p 文件 顯示第num行
sed 「na 內容」 文件名 在n行後加上內容
sed "s/舊 內容/新內容/g" 文件名 替換,g全局替換,不然只換一個
sed -e "nd" -e "s/舊內容/新內容/g" 文件名 刪掉第n行並替換內容
awk是一個強大的文本分析工具,把文件逐行的讀入,以空格爲默認分隔符,將每行切開,切開的部分再進行分析處理。
命令格式:
awk [選項參數] 'pattern{action1} pattern {action2}.....' 文件名
pattern 表示awk在數據中查找的內容,就是匹配模式 (/內容/ 是匹配格式)
action在找到匹配內容時所執行的一系列命令
在開始和結束地方加上新的內容
BEGIN 在全部數據讀取前執行,END在讀取全部數據後執行
FILENAME 文件名
NR 已讀的記錄數(執行到第幾行)
NF瀏覽記錄的域的個數(切割後,列的個數)
顯示文本空行行數與具體行號
提取特定文本
統計文本有幾行
查找文件空行所在的行號
$0表明一行全部內容,$1-$9表明第一列到第九列
sort 工具
將文件進行排序,並將排序結果標準輸出
sort(選項)(參數)
-n 依照數值大小排序
-r 以相反順序排序
-t 設置排序使用的分割字符
-k 指定須要排序的列
參數:指定須要排序的文件
求一列的和
>>追加
>寫入(覆蓋寫)
2> 重定向標準錯誤
2>>重定向標準錯誤
&>重定向標準輸出和標準錯誤
前面的內容交給後面處理
判斷輸出內容有幾行
echo 內容 輸出一行默認換行
單獨echo 至關於空行
echo -e 內容 能夠轉義字符 (\n,\t)
echo -n 內容 不轉義字符
echo 注意事項:
echo 「內容」 與 echo '內容'區別
雙引號能夠包含變量,但單引號不能解析變量
反引號能夠解析命令
echo -e 「\033[x;ym 內容 \033[0m」
x 字體顏色 30~37
y 背景顏色 40~47
輸出文件前10行
find 搜索區域 -name 文件名 以名字查詢文件(模糊查詢用*)
find 搜索區域 -perm 權限 根據權限查詢
find 搜索區域 -user 用戶 根據使用者查詢
find 搜索區域 -type 文件類型(d,f) 根據文件類型查找
find 搜索區域 -size 文件大小 根據文件大小查詢(+大於,-小於,c字節,k,M)
find 搜索區域 -mtime 時間 根據修改時間查找(+超過多少天,-在幾天內)
grep 「匹配內容」 文件名
grep -c ‘匹配內容’ 文件
grep -n ‘匹配內容’ 文件
grep -i "匹配內容" 文件 忽略大小寫
grep -v 「內容xx」 文件 不包含內容xx的行(除去特定行)
grep -E 「^xx」/"xx$" 以xx開始和以xx結束(-E表明使用正則)
grep -E ".+xx.+" 內容xx 在行中間
grep -E "^$" 文件 匹配空行
grep -E 「(xx)+」 文件 匹配屢次出現一次或屢次xx的行
grep -E 「(xx){num}」 文件 匹配連續出現num次的xx行
uniq -c 文件 打印緊挨着的重複行次數與內容(重複但隔着的不打印)
uniq -d 文件 只打印重複的行
split -n 被分割文件 保存文件 每n行分割,保存到文件中
rpm -qa | grep 服務名
nc -w num ip 端口名 有正常的顯示,服務正常
cat <<eof
內容
eof
cat <<eof 至關於echo,能一次輸出多行字符串,包括變量