Linux基礎(chǔ)學(xué)習(xí)筆記2 Shell
本文發(fā)布于博客frankwtq
這是Linux基礎(chǔ)學(xué)習(xí)筆記的第二部分芹扭,主要介紹Shell油啤。上一部分為Linux基礎(chǔ)學(xué)習(xí)筆記1
參考資料
- 主要為視頻資料:慕課網(wǎng)
- 輔助書籍:Linux從入門到精通(劉憶智 清華大學(xué)出版社)
Shell概述
- shell是一個(gè)命令行解釋器刚操,他為用戶提供一個(gè)Linux內(nèi)核發(fā)送請求以便運(yùn)行程序的界面系統(tǒng)及程序,用戶可以用Shell來啟動(dòng)、掛起、停止甚至是編寫一些程序歪沃。
- Shell還是一個(gè)功能相當(dāng)強(qiáng)大的編程語言嗦锐,易編寫,易調(diào)試沪曙,靈活性強(qiáng)奕污。Shell是解釋執(zhí)行的腳本語言,在Shell中可以直接調(diào)用Linux系統(tǒng)命令
- Shell的兩種主要語法類型有Bourne和C液走,彼此不兼容碳默。Bourne包括:sh、ksh缘眶、Bash腻窒、psh、zsh磅崭;C主要包括:csh、tcsh瓦哎。我們常使用的是Bash
- /etc/shells文件中記錄了能使用的shell
腳本執(zhí)行方式
echo輸出命令
echo [選項(xiàng)] [輸出內(nèi)容]
-e 支持反斜杠控制的字符轉(zhuǎn)換
\a 輸出警告音
\b 退格鍵砸喻,就是向左刪除鍵
\n 換行符
\r 回車鍵
\t 制表符,就是Tab鍵
\v 垂直制表符
\0nnn 按照八進(jìn)制ASCII碼表輸出字符
\xhh 按照十六進(jìn)制ASCII碼表輸出字符
第一個(gè)腳本
vim hello.sh
#!/bin/Bash
#The first program
echo -e "\e[1;34m 天上掉下個(gè)林妹妹! \e[0m"
腳本執(zhí)行
-
賦予執(zhí)行權(quán)限蒋譬,直接運(yùn)行
chomd 755 hello.sh
./hello.sh -
通過Bash調(diào)用執(zhí)行
bash hello.sh
Bash的基本功能
命令別名與快捷鍵
查看與設(shè)定別名
alias
查看系統(tǒng)中所有的命令別名
alias 別名= ‘原命令’
設(shè)定命令別名
別名永久生效與刪除別名
vi ~/.bashrc
寫入環(huán)境變量配置文件
source .bashrc
重新載入環(huán)境變量配置文件割岛,使其立馬生效
unalias 別名
刪除別名
歷史命令
history [選項(xiàng)] [歷史命令保存文件]
-c 清空歷史命令
-w 把緩存中的歷史命令寫入歷史命令保存文件~/.bash_history
歷史命令默認(rèn)會(huì)保存1000條,可以在環(huán)境變量配置文件/etc/profile中進(jìn)行修改
歷史命令的調(diào)用
- 使用上犯助、下箭頭調(diào)用以前的歷史命令
- 使用"!n"重復(fù)執(zhí)行第n條歷史命令
- 使用"!!"重復(fù)執(zhí)行上一條命令
- 使用"!字串"重復(fù)執(zhí)行最后一條以該字串開頭的命令
輸出重定向
標(biāo)準(zhǔn)輸入輸出(stdin stdout stderr)
|設(shè)備|設(shè)備文件名|文件描述符|類型|
|:---:|:---:|:---:|:---:|
|鍵盤|/dev/stdin|0|標(biāo)準(zhǔn)輸入|
|顯示器|/dev/stdout|1|標(biāo)準(zhǔn)輸出|
|顯示器|/dev/stderr|2|標(biāo)準(zhǔn)錯(cuò)誤輸出|
輸出重定向
命令 > 文件
命令 >> 文件
錯(cuò)誤命令 2> 文件
錯(cuò)誤命令 2>> 文件
-
>
表示以覆蓋的方式 -
>>
表示以追加的方式 -
>
和>>
表示命令運(yùn)行正確時(shí)輸出 -
2>
和2>>
表示命令運(yùn)行錯(cuò)誤時(shí)輸出
命令 > 文件 2>&1
命令 >> 文件 2>&1
# 重要癣漆,以追加的方式,把正確輸出和錯(cuò)誤輸出都保存到同一個(gè)文件中
命令 &> 文件
命令 &>> 文件
# 重要剂买,以追加的方式惠爽,把正確輸出和錯(cuò)誤輸出都保存到同一個(gè)文件中
命令 >> 文件1 2>> 文件2
# 重要,把正確的輸出追加到文件1中瞬哼,把錯(cuò)誤的輸出追加到文件2中
輸出重定向
wc [選項(xiàng)] [文件名]
-c 統(tǒng)計(jì)字節(jié)數(shù)
-w 統(tǒng)計(jì)單詞數(shù)
-l 統(tǒng)計(jì)行數(shù)
命令 < 文件把文件作為命令的輸入
例如:wc < abc.log
命令 << 標(biāo)識符
標(biāo)識符把標(biāo)識符之間內(nèi)容作為命令的輸入
例如:wc << abc在后面輸入任意字符串婚肆,當(dāng)再次遇到abc時(shí)會(huì)停止輸入并顯示統(tǒng)計(jì)的結(jié)果
多命令順序執(zhí)行
命令1 : 命令2
# 多個(gè)命令順序執(zhí)行,命令之間沒有任何邏輯聯(lián)系
命令1 && 命令2
# 邏輯與
# 當(dāng)命令1正確執(zhí)行坐慰,則命令2才會(huì)執(zhí)行
# 當(dāng)命令1執(zhí)行不正確较性,則命令2不會(huì)執(zhí)行
命令1 || 命令2
# 邏輯或
# 當(dāng)命令1執(zhí)行不正確,命令2才會(huì)執(zhí)行
# 當(dāng)命令1正確執(zhí)行结胀,命令2不會(huì)執(zhí)行
例子:
pwd赞咙;touch abc;ls;data
ls anaconda-ks.cfg && echo yes #運(yùn)行成功顯示yes
ls anaconda-ks.cfg || echo no #運(yùn)行失敗顯示no
命令 && echo yes || echo no #運(yùn)行成功顯示yes,運(yùn)行失敗顯示no
管道符
命令1 | 命令2
命令1的正確輸入作為命令2的操作對象
例如:
ll –a /etc/ | more
netstat –an | grep ESTABLISHED | wc -l
Shell中特殊符號
通配符
? 匹配一個(gè)任意字符
* 匹配0個(gè)或者任意多個(gè)任意字符
[] 匹配中括號中任意一個(gè)字符如:[abc]代表一定匹配一個(gè)字符糟港,可以是a攀操,可以是b也可以是c
[-] 匹配中括號中任意一個(gè)字符,-代表一個(gè)范圍如:[a-z]
[*] 邏輯非秸抚,表示匹配不是中括號內(nèi)的一個(gè)字符崔赌。例如[^0-9]代表匹配一個(gè)不是數(shù)字的字符
Bash中其他特殊符號
'' 單引號意蛀,單引號中的所有的特殊符號,如$和`(反引號)都沒有特殊含義
"" 雙引號健芭,雙引號中的特殊符號都沒有特殊含義县钥,但是$、`和\是例外慈迈,擁有調(diào)用變量的值若贮、引用命令和轉(zhuǎn)義符的特殊含義
`` 反引號,反引號括起來的內(nèi)容是系統(tǒng)命令痒留,在Bash中會(huì)先執(zhí)行它谴麦。和$()作用一樣,不過推薦使用$(),因?yàn)榉匆柗浅H菀卓村e(cuò)
$() 引用系統(tǒng)命令
# 在Shell腳本中伸头,#開頭的行代表注釋
$ 用于調(diào)用變量的值匾效,如需要調(diào)用變量name的值時(shí),用$name的方式得到
\ 轉(zhuǎn)義符恤磷,跟在\之后的特殊符號將失去特殊含義
例如:
aa=123;echo $aa
輸出:123
echo ‘$aa’
輸出:$aa
echo “$aa”
輸出:123
aa=`ls` #反引號
echo “$aa”
輸出:執(zhí)行l(wèi)s的結(jié)果
aa=$(ls) #作用同反引號