shell初识
? ? ? ? ? ? ? ?shell交互式解釋和執(zhí)行用戶輸入的命令或者自動地解釋和執(zhí)行預先設定好的一連串的命令, 也就是一個可以將用戶發(fā)出的操作命令解釋給操作系統(tǒng)的一個應用程序
?一,shell常用的通配符?
| * | 匹配 0 或多個字符 | a*b,a與b之間可以有任意長度的任意字符, 也可以一個也沒有, 如 aabcb, axyzb, a012b, ab |
| ? | 匹配任意單個字符 | a?b,a與b之間有且只有一個字符, 可以是任意字符, 如 aab, abb, acb, a0b |
| [list] | 匹配 list 中的任意單個字符 | a[xyz]b,a與b之間必須也只能有一個字符, 但只能是 x 或 y 或 z, 如 axb, ayb, azb。 |
| [!list] | 匹配除 list 中的任意單一字符 | a[!0-9]b,a與b之間必須也只能有一個字符, 但不能是阿拉伯數字, 如 axb, aab, a-b。 |
| [c1-c2] | 匹配 c1-c2 中的任意單一字符 | a[0-9]b,匹配0與9之間其中一個字符,如 a0b, a1b... a9b |
| {s1,s2,...} | 匹配 s1 或 s2 (或更多)中的一個字符串 | a{abc,xyz,123}b,a與b之間只能是abc或xyz或123這三個字符串之一 |
二.shell腳本初識
?#! 為shell與python 腳本語言的通用開頭 英文念做? she bang?
?示例1.編寫一個ping腳本,可以提示用戶輸入
#!/bin/bash read -p "please input a ip" ip ping -c1 $ip &>/dev/nullif [ $ip -eq 0 ] ;thenecho "$ip okkkkkkkkkkkkkkkkkk" elseecho "$ip fialeddddddddddd" fi如上圖shell中的變量賦值方式有三種
1.ip=xxx.xxx.xxx
2.read ip
3.$1?
?第一種是最簡單的賦值方式,但是沒有第二種使用read關鍵字讀入變量更為方便
這里順便介紹一個read關鍵字使用方式
?第三種是shell的一種默認輸入 $ 1,系統(tǒng)自動讀入執(zhí)行shell后的第一個參數
接下來看看變量的幾種類型?
shell腳本中的變量?
1.常用的系統(tǒng)變量有:
$HOME , $PWD , $SHELL , $USER
$HOME :當前家目錄路徑
$PWD: 當前路徑
$SHELL: 默認Shell解析器路徑
$USER: 當前用戶
2.自定義變量
1.基本語法
(1).定義變量: 變量=值? ? ? 引用變量? ?$變量名?或者 ${ 變量名}
(2).撤銷變量:unset 變量
(3).聲明靜態(tài)變量:readonly 變量=值 (注意:不能unset)
(4).可把環(huán)境變量提升為全局環(huán)境變量,可供其他shell程序使用
語法: export 變量名? ?
2.變量定義規(guī)則
(1)變量名稱可以由字母,數字和下劃線組成,但不能以數字開頭,環(huán)境變量名建議大寫。
(2)等號兩側不能有空格
(3)在bash中,變量默認類型都是字符串類型,無法直接進行數值運算
(4)變量值如果有空格,需要使用雙引號或單引號括起來
?一些特殊的符號變量
$n
$n
(功能描述: n為數字,$0代表該腳本名稱,$1~$9代表第一個到第九個參數,十以上的 參數需要用大括號包含,如 ${10})
$#
$#
功能描述:獲取所欲輸入參數個數,常用于循環(huán)。
$*和 $@
$*
功能描述:這個參數代表命令行中的所有參數, $* 把所有的參數看成一個整體
$@
功能描述:這個參數也代表命令行中的所有的參數,不過 $@把每個參數區(qū)分對待
變量的運算符
1.? $[運算式]? 或者?$( (運算獅) )
lt
變量內容的刪除與替換
?符號# 從前向后刪除??
#為最短匹配
##為貪婪匹配?
%為從后向前刪除?
??
索引與切片?
?:從第幾個開始 :取幾個
替換?
/ /為貪婪匹配
${變量名-新的變量值}
變量沒有被賦值(包括空值):都會使用“新的變量名”替代
變量有被賦值:不會被替代?
??條件測試
[ 條件?] ( 條件?前后都要加空格)
注意: 條件非空即為true ,[ ]返回false。
?常用判斷條件:
兩個整數之間
-lt 小于 (less than)
-le 小于等于 (less equal)
-eq 等于 (equal)
-gt 大于(greater than)
-ge 大于等于(greater equal)
-ne 不等于(not equal)
?文件權限測試
-r 有讀的權限(read)
-w 有寫的權限(write)
-x 有執(zhí)行的權限(execute)
?按文件類型進行判斷
-f 文件存在并且是一個常規(guī)的文件(file)
-e 文件存在(existence)
-d 文件存在并且是一個目錄文件(directory)
字符串比較
提示 使用雙引號
[ "$變量" = "字符串"]? ?是否相等
[ "$變量" = "字符串"]? ?是否相等
[ ?-z "字符串"]? ?長度是否是零
[ ?-n?"字符串"]? ?長度是否不是零? ? ?變量為空或者未定義都為0
條件比較
?[ "條件" -a?"條件"]? ?是否都真
?[ "條件" -o?"條件"]? ?是否一個是真
模式匹配? ? case
1.基本語法
case $變量名 in
;;
“值1”)
如果變量的值等于1,則執(zhí)行程序1
;;
“值2”)
如果變量的值等于2,則執(zhí)行程序2
…省略其他分支…
;;
*)
如果變量的值都不是以上的值,則執(zhí)行此程序
;;
esac
2.實例(需求輸入1 打印a,輸入2打印b,都不符合輸出c)
內容:
#!/bin/bash?
? ?case $1 in
1)
? ? ? echo "a"
;;
2)
? ? ? echo "b"
;;
*)
? ? ? echo "c"
;;
esac ? ? ? ? ??
條件測試 if
基本語法:
if [ 條件判斷式 ];then
程序
或者
if [ 條件判斷式 ]
then
程序
elif相當于 ( else if )
[[ ]] 兩個括號代表支持正則表達式
注意:
(1).方括號前后都要有空格
(2).if后面要有空格
for
1.基本語法1
for (( ?初始值;循環(huán)控制條件;變量變化 ))? ?do
? ? ? 程序
? ?done
?實現一個計算1+到100腳本
1 #!/bin/bash2 # add3 4 s=0;5 for ((i=1 ;i<=100;i++)) 6 do7 s=$[i+s]8 done9 echo $sfor基本語法2
for 變量 in 值1 值2 值3
? ? do
? ? ? 程序
? ? done
?
while
基本語法:?while[ 條件判斷式 ]
? do?
? ? ? 程序
? done
?從1加到100
#!/bin/bashs=0;i=1;while [ $i -le 100 ]dos=$[ $s + $i ];i=$[ $i +1 ]doneecho $sread讀取控制臺輸入
1.read基本語法
? ? ? ? -p 指定讀取值的提示符
? ? ? ? -t 指定讀取值等待時間
指定在三秒內輸入?
read -t 3 -p"3s" i s=0;while [ $i -le 100 ]dos=$[ $s + $i ];i=$[ $i +1 ]doneecho $sbasename會刪除前綴
?dirname與之相反
?
shell(工具)
1.cut
?在文件中每一行剪切字節(jié)字符字段將這些輸出
用法 cut? [參數] filename
默認參數是指標副
不會改變原文件
| -f | 列號,提取第幾列 |
| -d | 分割符,按照指定分隔符分割列 |
文本
1 2 3 4
5 6 7 8
9 10 11 12?
切割第一列?
?切割第一二列?
?切除第二列后的所以內容
?
sed
是一個流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區(qū)中,稱為”模式空間“,接著用sed命令處理緩沖區(qū)中的內容,處理完后,把緩沖區(qū)的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾 不會改變原文件
| a | 新增,a的后面可以接字串,在下一行出現 |
| d | 刪除 |
| s | 查找并替換 |
?在第二行后加入aaa
?將包含5的行刪除
將wo替換成ni
awk
一個強大的文本分析工具,把文件逐行讀入,以空格為默認分隔符將每行切片,切開的部分在進行分析處理?
2.選項參數說明
| -F | 指定輸入文件拆分符 |
| -v | 賦值一個用戶定義變量 |
使用用法類似于cut?
?
?
?
?
?
?
?
?
?
總結
- 上一篇: 中国共产党中电金信数字科技集团有限公司第
- 下一篇: 关于生成订单号规则的一些思考