主要從以下幾個方面進行bash入門級的總結:
1、命令歷史、命令補全
2、管道、重定向
3、命令別名和命令替換
4、命令行編輯
5、文件名通配
6、Bash的相關配置文件及變量
7、編程(條件判斷、循環控制)
8、bash中的數組
9、shell編程技巧和編程規范
1、命令歷史、命令補全
查看命令歷史:history
-c:清空命令歷史
-d OFFSET [n]: 刪除指定位置的命令
-w:保存命令歷史至歷史文件中,這對於經常在不同的終端上執行命令很有用
命令歷史的使用技巧:
!n:執行命令歷史中的第n條命令;
!-n:執行命令歷史中的倒數第n條命令;
!!: 執行上一條命令;
!string:執行命令歷史中最近一個以指定字符串開頭的命令
!$:引用前一個命令的最後一個參數;
Esc, .
Alt+.
命令補全,路徑補全
命令補全:搜索PATH環境變量所指定的每個路徑下以我們給出的字符串開頭的可執行文件,如果多於一個,兩次tab,可以給出列表;否則將直接補全;
路徑補全:搜索我們給出的起始路徑下的每個文件名,並試圖補全;
2、管道、重定向
管道------前一個命令的輸出,作為後一個命令的輸入
命令1 | 命令2 | 命令3 | ...
如:cat /var/log/message |less
find ./ -name ex* | xargs mv /backup
> 覆蓋輸出
>> 追加輸出
2> 重定向錯誤輸出
2>> 追加方式
&> 重定向標准輸出或錯誤輸出至同一個文件
< 輸入重定向
<< Here Document
:> file 清空一個文件
對於Here Document舉個實例:
cat >> /etc/hosts << EOF
172.28.9.45www01.opsmysql.com
172.28.9.46www02.opsmysql.com
172.28.9.47www03.opsmysql.com
172.28.9.48www04.opsmysql.com
EOF
"*/5 * * * * /usr/sbin/ntpdate ntp.api.bz > /dev/null 2>&1
/dev/null 2>&1 : 意思是將標准輸出和錯誤輸出全部重定向到/dev/null中
3、命令別名和命令替換
命令別名
alias CMDALIAS='COMMAND [options] [arguments]'
在shell中定義的別名僅在當前shell生命周期中有效;別名的有效范圍僅為當前shell進程;
ualias CMDALIAS
對於我們設定別名的命令,如果要使用沒有設定別名時的命令格式,即默認格式可以在命令前面加上: \
\CMD
對於別名我們還可以寫在配置文件中:
全局配置文件:/etc/bashrc
用戶配置文件:~/.bashrc
命令替換: $(COMMAND), 反引號:`COMMAND`
把命令中某個子命令替換為其執行結果的過程
如:
echo "The date time is : `date`"
echo "The date time is : $(date +%F)"
bash支持的引號:
``: 命令替換
"": 弱引用,可以實現變量替換
'': 強引用,不完成變量替換
4、命令行編輯
光標跳轉:
Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Ctrl+u: 刪除光標至命令行首的內容
Ctrl+k: 刪除光標至命令行尾的內容
Ctrl+l: 清屏
5、文件名通配:globbing
*: 任意長度的任意字符
?:任意單個字符
[]:匹配指定范圍內的任意單個字符
[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
[:space:]:空白字符
[:punct:]:標點符號
[:lower:]:小寫字母
[:upper:]: 大寫字母
[:alpha:]: 大小寫字母
[:digit:]: 數字
[:alnum:]: 數字和大小寫字母
# man 7 glob
[^]: 匹配指定范圍之外的任意單個字符
[[:alpha:]]*[[:space:]]*[^[:alpha:]]