一、bash的簡介
操作系統都是需要通過shell跟內核來交互的,常見的shell有GUI、KDE、sh、csh、bash、tsh、zsh等、
而linux中最常用的shell就是bash。
二、bash的特性
1.編輯快捷鍵
Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Ctrl+u:刪除光標至命令行首的內容
Ctrl+k:刪除光標至命令行尾的內容
Ctrl+l:清屏
Ctrl+c:終止取消命令
Ctrl+z:將當前命令送至后台(fg調回命令)
2.命令歷史
查看命令歷史:history
-c:清空命令歷史
-w:保存命令歷史至文件中
3.命令展開
~:為家目錄
{}:展開多個目錄
/home/{zrq/{job,wok},demo} =/home/zrq/job /home/work /home/demo
4.補全功能
①命令補全:通過tab鍵在PATH中搜索補全
PATH:一組以冒號分割的路徑集合
shell命令分為內部命令與外部命令
內部命令:直接構建在shell之中的命令
外部命令:在系統的某一路徑下游可執行程序
②路徑補全:給出排頭的路徑補全,如果沒有補全則默認為當前路徑
5.通配符
① *:匹配任意長度任意字符。
② ?:匹配任意單個字符
③ []:匹配指定范圍內任意單個字符,不區分大小寫
④ [^]:匹配指定字符外的任意單個字符
6.命令別名(alias)
查看命令別名:alias
臨時定義新的命令別名:alias 別名 =‘命令’
取消臨時定義的命令別名:unalis 別名
7.bash中的變量
變量的類型
①自定義變量:只對當前shell有效,對其子shell無效。
定義變量:變量名=“Value”
引用變量:${變量名}
撤銷變量:unse t變量名
②本地變量:只對局部生效
定義變量:local 變量名=“Value”’
③環境變量:對shell及子shell都有效
export
-p:查看當前環境變量
④位置變量:
$1..$n(代表從第一個位置到第n個位置的變量)
⑤特殊變量:
$0::代表腳本名稱自身
$?:代表上一個命令的執行狀態(0表示成功,非0均表示不成功)
$$:shell最后運行的后台process的PID
8.bash中的輸入輸出重定向和管道命令
①標准I/O
標准注入:默認一般指鍵鼠
標准輸出:默認一般指顯示器
標准錯誤輸出:默認一般指顯示器
②I/O重定向
輸入重定向:<
輸出重定向:>,>>
>:覆蓋輸出
>>:追加輸出
set -C :禁止使用覆蓋重定向覆蓋已存在文件。
set +C:關閉禁止
錯誤重定向:2>,2>>
同時重定向正確輸出與錯誤輸出:&>
③管道命令
:|
管道命令就是一種輸入輸出的一種實現,將命令的結果輸出到管道,然后通過這個管道輸入給下一個命令。
同時管道命令是可以多重的
命令1|命令2|命令3
③ tee命令
當你想把一個命令的輸出,保存到文件中,又想對輸出進行另外操作時候。
比如:/etc//work下的文件名 輸出到/tmp/test 中並統計共多少行
cat /etc/work | tee /tmp/test |wc -l
注意:tee的位置
三、bash的配置文件(使用戶配置持久配置)
1.bash的配置文件分為兩類
①profile類(為交互式登錄提供配置)
/etc/profile:全局的
/etc/profile.d/*sh:全局的
~/.bash_profile:僅對個人用戶有效
功能:
設定環境變量
運行腳本或命令
②bashrc類(為非交互式登錄提供配置)
/etc/bashrc:全局的
~/.bashrc:僅對個人用戶有效
功能:
設定本地變量
定義命令別名
2.登錄類型
①交互式登錄
直接通過終端輸入賬號密碼登錄
su - 用戶名 或 su -l 用戶名 登錄
②非交互式登錄
su 用戶名
圖形界面下的終端
3.bash讀取配置文件順序
①交互式登錄讀取順序
/etc/profile --->/etc/profile.d/*.sh--->~/.bash_profile --->~/.bashrc ---> /etc/bashrc
②非交互式登錄讀取順序
~/.bashrc ---> /etc/bashrc ---> /etc/profile.d/*.sh
4.配置生效方式
①強制重讀
source 文件名
. 文件名
②重新登錄
四、bash中的算數
1.declare
-i:整型變量
2.let
let 變量名=算數表達式
例如:let sum=$num1+$num2
echo $sum
3.算數表達式
變量名=$[$sum1+$sum2]
五、bash的測試
1.整數測試
2.字符串測試
3.文件測試
①單目測試
-e file :測試文件是否存在
-f /path:測試目標文件是否為普通文件
-d: 目錄文件
-b:
-c:
-p:
-s:
-r:文件存在且當前用戶有有讀權限
-x:測試文件是否存在且不為空
②雙目測試
file1 -nt file2 :測試文件1是否比文件2新
六、輪替
shift
