Bash用法總結

來源:互聯網
上載者:User
Linux 下shell基本上預設是 bash, 下面是我總結的一些技巧。

${varible##*string} 從左向右截取最後一個string後的字串${varible#*string}從左向右截取第一個string後的字串${varible%%string*}從右向左截取最後一個string後的字串${varible%string*}從右向左截取第一個string後的字串


&  後台運行程式  ()   使用子shell, 比如 (cd ../../commlib/; make) 
$()  命令替換,和 ``的作用是一樣的 
<(命令)  把命令的輸出到一個臨時檔案 
<< HereDoc

使用舉例:
比如你要在 shell 指令碼中 使用 awk 指令碼 
awk -f <(cat <<EOF
  /abc/{
   print $0;
} 
EOF 
)


$(())  執行整數計算 $((66/2))  if (( 算術運算 )) 
if [[ 字串運算 ]]
alias 定義命令別名
dot .  或 source 命令, 在當前shell中執行指令碼
exec 可以重新導向當前shell的檔案描述符, 或運行另一個程式。
trap 可以捕獲訊號
nohup 防止ssh 掛起導致的問題 
screen 可以用來保持 會話,  不受ssh的關閉影響
export 匯出變數給子shell使用
tee 可以 把 輸出 分流
ENV_VAR=VALUE your_program 這樣可以 為這一個程式 修改它環境變數,外部shell的環境變數沒有被更改
tac 倒置檔案

目錄跳轉
cd -   快速回到前一個路徑
cd  回到使用者的home目錄
pushd, popd, dirs 實現多目錄跳轉
pushd 命令用來更改您的目前的目錄並將其儲存在堆棧中。 popd 命令用來從堆棧的頂部移除目錄並使您返回該位置。 dirs 命令來顯示目前的目錄堆棧。(dir –v –p)
pushd +n; popd +n 可以操作虛擬目錄堆棧

快速跳至常用目錄
     你可能已經知道$PATH變數可以列出 bash的“搜尋路徑”——當在目前的目錄不能找到請求的檔案時,bash會自動搜尋的目錄。不過,bash也支援$CDPATH變數,當試圖改變目錄時該變數列出cd命令轉向的目錄。為了使用這個特性,我們要對$CDPATH變數賦值一個目錄列表,如下面的例子所示:
bash> CDPATH='.:~:/usr/local/apache/htdocs:/disk1/backups'
bash> export CDPATH
現在,無論何時使用cd命令,bash將會檢查$CDPATH列表中的所有目錄來尋找要轉向的目錄名。

特殊參數
1) $*: 代表所有參數,其間隔為IFS內定參數的第一個字元 
2) $@: 與*星號類同。不同之處在於不參照IFS 
3) $#: 代表參數數量 
4) $?: 執行上一個指令的傳回值 
5) $-: 最近執行的foreground pipeline的選項參數 
6) $$: 本身的Process ID 
7) $!: 執行上一個背景指令的PID 
8) $_: 顯示出最後一個執行的命令

bash快速鍵

Emacs風格


ctrl+p: 方向鍵 上 ↑ 
ctrl+n: 方向鍵下 ↓ 
ctrl+b: 方向鍵 ← 
alt+f: 游標右移一個單詞 
ctrl+f :方向鍵 → 
alt+b: 游標左移一個單詞 
ctrl+a:游標移到行首 
ctrl+e:游標移到行尾 
ctrl+k:清除游標後至行尾的內容。 
ctrl+d: 刪除游標所在字母;注意和backspace以及ctrl+h的區別,這2個是刪除游標前的字元 
ctrl+r:搜尋之前打過的命令。會有一個提示,根據你輸入的關鍵字進行搜尋bash的history 
ctrl+m : 輸入斷行符號 
ctrl+i : 輸入tab 
ctrl+[ : 輸入esc

其它 
ctrl+h:刪除游標前一個字元,同 backspace 鍵相同。 
alt + p 非增量方式反向搜尋曆史 
alt + > 曆史命令列表中的最後一行命令開始向前 
ctrl+u: 清除游標前至行首間的所有內容。 
ctrl+w: 移除游標前的一個單詞 
ctrl+t: 交換游標位置前的兩個字元 
ctrl+y: 粘貼或者恢複上次的刪除 
ctrl+l:清屏,相當於clear。 
ctrl + xx 游標在行頭與行尾進行跳轉 
alt+r 撤銷當前行的所有內容 
ctrl+z : 把當前進程轉到後台運行 
ctrl+s : 鎖住螢幕 
ctrl+q : 恢複螢幕 
ctrl+v key: 輸入特殊字元 
alt + l 將當前游標處之後的字母轉化成小寫字母 
alt + u 將當前游標處之後的字母轉化成大寫字母 
ctrl + Alt + e 擴充命令列的內容(例如:ls  =>  ls  -l  --color=tty) 
ctrl+c:殺死當前進程, 輸入模式下,中斷輸入的命令。 
ctrl+d:退出當前 Shell 
esc + . 快速鍵可以輪詢曆史命令的參數或選項。 
esc + t 快速鍵可以 置換前兩個單詞。 
輸入重複字母 Esc {100} e 可以輸入100個e字元

按多次{esc}可以補全 
{esc}{~}可以補全本機上的使用者名稱 
{esc}{/}可以補全檔案名稱 
{esc}{@}可以補全主機名稱,localhost可以方便地用 lo補全.


Bang Bang 曆史命令
!!    重新執行上一條命令 
!N  重新執行第N條命令。比如 !3 
!-N 重新執行倒數第N條命令。!-3 
!string  重新執行以字串打頭的命令。 比如 !vim 
!?string?  重新執行包含字串的命令。 比如 !?test.cpp? 
!?string?%  替換為: 最近包含這個字串的命令的參數。比如:   vim !?test.cpp?% 
!$   替換為:上一條命令的最後一個參數。比如 vim !$ 
!!string  在上一條命令的後面追加 string ,並執行。 
!Nstring  在第N條指令後面追加string,並執行。 
^old^new^  對上一條指令進行替換 
修飾

:s/old/new/  對第N條指令中第一次出現的new替換為old。 比如 vim !?test.cpp?:s/cpp/c/ 
:gs/old/new/  全部替換 
:wn  w為數字, 取指令的第w個參數. 
:p 回顯命令而不是執行, 比如 !ls:p  。 這個很有用, 你可以先查看你選的命令對不對,要執行時再使用!!

Bash相關檔案
     /etc/profile 設定環境變數(所有使用者) 
     ~/.bash_profile 設定環境變數(目前使用者) 
     ~/.bashrc 
     ~/.bash_history 
     ~/.bash_logout

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.