老亞瑟比較喜歡用cheat sheet(備忘錄)的方式學習一些編程里零散但又經(jīng)常會用到的知識點。相比于冗長詳盡的博客,這種方式既簡單輕量,同時每次查看的時候可以通過大腦對知識進行自動補全,能不斷提升對應知識點的記憶。但是缺點也很明顯,就是講述不夠細致全面。所以,如果讀者對相關(guān)cheat sheet的知識儲備太少的話,建議先系統(tǒng)學習。
下面是我學習和使用Linux shell時的cheat sheet。
test = [ ] 這兩個是shell 程序
[[ ]] 這個是shell 關(guān)鍵字
引號" " 雙引號中可以使用$對變量取值
' ' 單引號中所有字符均表示字面值,無法用$取值
字符串比較[[ "$s1" != "$s2" ]] [ "$s1" != "$s2" ]
[[ "$s1" == "$s2" ]] [ "$s1" == "$s2" ]
[[ "$s1" = "$s2" ]] [ "$s1" = "$s2" ]
[[ "$s1">"$s2" ]] [ "$s1" \>"$s2" ]
[[ "$s1"< "$s2" ]] [ "$s1" \< "$s2" ]
數(shù)字比較(對[ ] [[ ]] 均有效)-eq -ne
-gt -ge
-lt -le
字符串測試(對[ ] [[ ]] 均有效)-z True for zero
-n True for non-zero
文件測試(對[ ] [[ ]] 均有效)-e True for file exist
-f True for normal file exist
-d True for dir exist
-c True for char file exist
-b True for block file exist
-p True for pipe file exist
-S True for socket file exist
-L/-h True for symbol link exist
-r/w/x True for readable/writable/executable file exist
邏輯運算符[[ cond-a && cond-b ]] [ cond-a -a cond-b ]
[[ cond-a || cond-b ]] [ cond-a -o cond-b ]
[[ ! cond ]] [ ! cond ]
正則匹配[[ "$ss" =~ regex ]] && echo ${BASH_REMATCH[1]}
if 判斷if TEST-COMMANDS; then
CONSEQUENT-COMMANDS
elif TEST-COMMANDS; then
CONSEQUENT-COMMANDS
else
CONSEQUENT-COMMANDS
fi
for 循環(huán)for i in “file1” “file2” “file3”
for i in /boot/*
for i in /etc/*.conf
for i in $(seq -w 10)
for i in {1..10}
for i in $(ls)
for i in $(< file)
for i in "$@"
for ((i=0; i<5; i++))
do
commands
done
while/until 循環(huán)while read -r line
do
commands
done< "path/to/file"
while getopts :xy: opt
do
case "$opt" in
x)
;;
y)
Y=$OPTARG
;;
:)
echo "require args"
;;
?)
echo "invalid args"
;;
esac
done
while true
while :
until condition 至少執(zhí)行一次,和while 條件相反
done 2>error.log 在所有循環(huán)體的done 后面可以做標準輸出/錯誤的重定向,while/until循環(huán)體的done可后面以做標準輸入重定向
select/case 循環(huán)select VAR in LIST
do
case EXPR in
PATTERN1)
CONSEQUENT-COMMANDS
;;
PATTERN2 | PATTERN3)
CONSEQUENT-COMMANDS
;;
esac
done
# case 語句可以單獨使用
循環(huán)控制break 用于for/while/until/select
continue 用于for/while/until
特殊字符$@ argv
$# argc
$* argv to string
$0 script name
$? Last cmd exit code
$$ process ID
變量$PARAMETER = ${PARAMETER}
${!PARAMETER} 間接參數(shù)擴展
${!PREFIX*} = ${!PREFIX@} 變量名擴展
字符串操作${PARAMETER#PATTERN} 從前向后找,刪除最短匹配串
${PARAMETER##PATTERN} 從前向后找,刪除最長匹配串
${PARAMETER%PATTERN} 從后向前找,刪除最短匹配串
${PARAMETER%%PATTERN} 從后向前找,刪除最長匹配串
${PARAMETER/PATTERN/STRING} 查找并替換一處匹配
${PARAMETER//PATTERN/STRING} 查找并替換所有匹配
${PARAMETER/PATTERN} 查找并刪除一處匹配
${PARAMETER//PATTERN} 查找并刪除所有匹配
${#PARAMETER} 計算字符串長度
${PARAMETER:OFFSET:LENGTH} 獲取子串,LENGTH可忽略
數(shù)組myarrary=(value1 value2 valueN) 數(shù)組初始化
${myarrary[3]}="new one" 插入數(shù)組元素
unset myarrary[3] 刪除數(shù)組元素
${myarrary[@]} = ${myarrary[*]} 遍歷數(shù)組元素
myarray=(${STRING}) 將字符串按空格轉(zhuǎn)換成數(shù)組
數(shù)學運算var=$(( EXPR )) 用算術(shù)擴展進行整數(shù)計算
let EXPR 用let進行算術(shù)運算,運算式中不能有空格
expr EXPR 用expr進行算術(shù)運算,運算符兩邊必須用空格,并且只能計算整數(shù)
函數(shù)定義1 function func_name {commands }
定義2 func_name() {commands }
函數(shù)入?yún)?$1 .. $n
定義函數(shù)內(nèi)部變量 local
函數(shù)返回碼 return N
函數(shù)返回值,函數(shù)內(nèi)最后一條命令的結(jié)果
調(diào)用 func_name arg1 arg2
調(diào)用,接收返回值 ret=$(func_name arg1 arg2)
調(diào)用,轉(zhuǎn)入后臺 func_name args &
加載外部腳本文件. /path/to/bash/script args
source /path/to/bash/script args
標準輸出、錯誤同時重定向command &>filename
command >& filename
command >filename 2>&1
command 2>&1 >filename
管道過濾器awk -F: '{print $1 $NF}' #顯示列
cut -d: -f1,6 #顯示列
cut -c 1 #顯示第一個字符
grep "string" #顯示包含string的行
grep "regex" #顯示匹配正則表達式的行
grep -i "string" #顯示包含string的行,忽略大小寫
grep -v "string" #顯示不包含string的行
grep -E "str1|str2" #顯示包含str1或者str2的行
head -n 5 #顯示前5行
paste -d: file1 file2 #將文件內(nèi)容橫向合并,分隔符為:
paste file1 - - - #將文件內(nèi)容顯示為3列
sed 's/xxx/yyy/g' #將xxx替換為yyy
sed '/xxx/d' #將xxx刪除
sed -e cmd1 -e cmd2 #執(zhí)行多個sed 命令
sed -i cmd #直接修改文件
sort -n #首列按字面數(shù)值排列
sort -u #排序后去重
strings #過濾出可打印字符串
tail -n 5 #顯示文件最后5行
tee #不影響顯示的情況下存儲輸出到文件
tr 'regex1' 'regex2' #將regex1 轉(zhuǎn)換成regex2
tr -d 'regex' #刪除regex匹配到的字符
uniq #刪除重復的行
uniq -c #計算重復行數(shù)
wc -l #計算行數(shù)
grep 正則字符集^ #錨定行的開始
$ #錨定行的結(jié)束
. #匹配一個非換行符的字符
* #匹配零個或多個先前字符
.* #一起用代表任意字符
[] #匹配一個指定范圍內(nèi)的字符。
[^] #匹配一個不在指定范圍內(nèi)的字符
/(/) #標記匹配字符
/< #錨定單詞的開始,
/>#錨定單詞的結(jié)束
/{m,n/} #重復字符m~n次,n可忽略
/w #[A-Za-z0-9]
/W #/w的反置形式
/b #單詞鎖定符
[[:alnum:]] #[A-Za-z0-9]
[[:alpha:]] #[A-Za-z]
[[:digit:]] #[0-9]
[[:lower:]] #[a-z]
[[:upper:]] #[A-Z]
[[:blank:]] #空字符: 空格鍵符 和 制表符
[[:space:]] #空格字符: 制表符、換行符、垂直制表符、換頁符、回車符和空格鍵符
awk 語法awk -F: 'PATTERN { ACTION }'
awk -F: 'BEGIN { ACTION } /pattern1/ { ACTION } /pattern2/ { ACTION } END { ACTION }'
推薦閱讀《Linux Shell 命令行及腳本編程實例詳解》
原始博客連接: https://editor.csdn.net/md?articleId=127997233
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當前題目:shellcheatsheet(備忘錄)-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://jinyejixie.com/article44/egihe.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、企業(yè)網(wǎng)站制作、移動網(wǎng)站建設、網(wǎng)站建設、營銷型網(wǎng)站建設、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容