linux 下shell基本上預設是 bash, 下面是我總結的一些技巧。
$ 從左向右擷取最後乙個string後的字串& 後台執行程式$從左向右擷取第乙個string後的字串
$從右向左擷取最後乙個string後的字串
$從右向左擷取第乙個string後的字串
() 使用子shell, 比如 (cd ../../commlib/; make)
$() 命令替換,和 ``的作用是一樣的
<(命令) 把命令的輸出到乙個臨時檔案
<< heredoc
使用舉例:
比如你要在 shell 指令碼中 使用 awk 指令碼
awk -f <(cat <
$(()) 執行整數計算 $((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 e 可以輸入100個e字元
按多次可以補全
可以補全本機上的使用者名稱
可以補全檔名
可以補全主機名,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
BASH 陣列用法小結
bash只支援一維陣列,但引數個數沒有限制。宣告乙個陣列 declare a array 其實不用宣告,按陣列方式直接賦值給變數即可,bash就知道那是陣列 陣列賦值 1 array var1 var2 var3 varn 2 array 0 var1 1 var2 2 var3 n varn 3 ...
bash的常見用法
shell 俗稱殼 用來區別於核 是指 提供使用者使用介面 的軟體 命令解析器 它類似於 dos下的 command.com 和後來的 cmd.exe 它接收使用者命令,然後呼叫相應的應用程式。由於早年的 unix 年代,發展者眾,所以由於 shell 依據發展者的不同就有許多的版本,例如常聽到的 ...
bash中case的用法
看到一些很實用的指令碼,由於之前對於bash指令碼的積累都比較離散,沒有乙個全面的了解,在這裡記錄一下 bash的case語句用法 case語句的語法規則是 case 變數名 in 模式1 命令序列1 模式2 命令序列2 預設執行的命令序列 esac 注意的是,case比較的是pattern,然後既...