bash的特性之一
history
保存的條數:
環境變量:HISTSIZE
用戶退出時的持久保存位置:
環境變量:HISTFILE,通常默認爲用戶家目錄下的.bash_history
此文件中可保存的最大數目:
環境變量:HISTFILESIZE
用法:
history N: 顯示最近的N條,包括當前命令自身;
history -c: 清空命令歷史
history -d offset: 刪除指定的偏移處的命令條目
history -a [/path/to/some_history_file]: 將當前會話中的命令歷史寫入指定文件
bash調用命令歷史列表中的命令:
!#: 執行命令歷史中的第#條命令
!!: 執行上一條命令
!string: 執行命令歷史中最近一次以string開頭的命令;
!$: 調用上一條命令的最後一個參數
ESC, .:功能同上
bash的特性之二:命令補全
根據內建命令或外部命令的查找方式查找以用戶指定的字符串開頭的命令
如果用戶指定的開頭字符串能惟一標識某命令,則tab鍵可補全此命令
否則,則兩次tab鍵可顯示所有以指定字串開頭的命令
bash特性之三:路徑補全
以用戶指定的起始路徑進行文件名補全查找
每個絕對路徑都可以切割爲兩部分
基名
basename /path/to/somewhere
結果爲somewhere
目錄名
dirname /path/to/somewhere
結果爲/path/to
bash的工作特點:沒有返回信息通常最好的信息
每個命令執行結束後,會有一個“執行狀態返回值”,有效範圍0-255
0: 執行成功
1-255: 執行失敗
使用特殊變量$?可以獲取最近一條命令的狀態返回值
# echo $?
bash特性之四:命令行展開
~: 用戶家目錄
~USERNAME: 指定用戶的家目錄
bash特性之五:命令別名和命令引用:
alias
alias ALIAS=COMMAND
別名與命令同名時:
絕對路徑
\COMMAND
生效範圍:命令行定義的別名,其生效範圍爲當前會話;
unalias [ALIAS]
-a: 撤消所有別名
bash支持的引用:
''
""
``:引用一個命令的執行結果
$()
bash特性之六:文件名通配(globbing):
*: 任意長度的任意字符
p*d, pad, pbd, pd
*ab*c
?: 匹配任意單字符
[]: 匹配指定範圍內的任意單字符
[abc], [a-z], [0-9], [0-9a-z]
[^]:匹配指定範圍以外的任意單字符
[^0-9a-z]
字符集合:
[:space:]
[:punct:]
[:lower:]
[:upper:]
[:digit:]
[:alnum:]
[:alpha:]
bash特性之七:輸入、輸出重定向和管道
程序:
數據來源:輸入流
數據目標:輸出流
文件:文件系統(內核)
標準輸入:0
鍵盤
標準輸出:1
監視器
錯誤輸出:2
監視器
重定向意味着:
改變其標準位置
輸出重定向:
COMMAND > POSITION:覆蓋輸出
COMMAND >> POSITION: 追加輸出
錯誤重定向:
COMMAND 2> POSITION:覆蓋輸出
COMMAND 2>> POSITION: 追加輸出
合併重定向:
COMMAND &> POSITION
COMMAND > POSITION 2> &1
分別重定向
COMMAND > POSTIION 2> POSTION2
輸入重定向:
COMMAND < POSITION
<<:Here Document
文本處理命令:tr
tr 'SET1' 'SET2'
-d: 刪除指定字符集合中的所有字符
多道輸出:
COMMAND | tee POSITION
bash:快捷鍵
Ctrl+a: 跳轉至命令行首
Ctrl+e: 尾
Ctrl+u: 刪除命令行首至當前光標所在處之前的所有內容
Ctrl+k: 刪除當前光標所在處至命令行尾的所有內容
Ctrl+l: 清屏
Ctrl+c: 中止或取消
Ctrl+z: 把當命令送至後臺
bash的特性之八:變量
bash變量類別:
本地變量:只對當前shell進程有效的變量;對其它shell進程無效,包當前shell進程的子進程;
VAR_NAME=VALUE
變量賦值:向變量的存儲空間保存數據
變量引用:${VAR_NAME}
"":弱引用,裏面的變量會被替換;
'':強引用,裏面的所有字符都是字面量,直接輸出;
環境變量:對當前shell進程及其子shell有效,對其它的shell進程無效;
定義:export VAR_NAME=VALUE
導出:export VAR_NAME
用戶可自義環境變量
bash有許多內置的環境變量
撤消變量:unset VAR_NAME
只讀變量:readonly VAR_NAME
局部變量:
對shell腳本中某代碼片斷有效;通常用於函數本地;
local VAR_NAME=VALUE
位置變量:
$1, $2, ..., ${10}
特殊變量:
$?
bash的配置文件:
profile類:爲交互式登錄的用戶提供配置
全局:
/etc/profile
/etc/profile.d/*.sh
用戶:
~/.bash_profile
功用:
1、設定環境變量
2、運行命令或腳本
bash編程
bash的循環語句:
for:遍歷有限的元素列表。
for語句的格式:
for VAR_NAME in LIST; do
循環體
done
LIST:列表,中間包括一個或多個元素
例如:創建10個用戶,user1, user10
#/bin/bash
#
for user in $(seq 301 310); do
useradd user${user}
done
bash算術運算:
變量:弱類型
如何定義整型變量:
let VAR_NAME=INTEGER_VALUE
如:let a=3
declare -i VAR_NAME=INTEGER_VALUE
例如:declare -i a=3
注意:即使沒有定義爲整型變量,字符型的數字依然可以參與算術運算;bash會執行變量類型的隱式類型轉換。
例如:計算100以內所有正整數之和
#!/bin/bash
#
declare -i sum=0
for i in {1..100}; do
sum=$[$sum+$i]
done
echo $sum