Linux 常用內置命令集(五)
本文旨在整理常用的Bash內置命令集,便於記憶與回顧。我們可以在bash中鍵入help來查看所支持的所有內置命令。
28. popd & pushd
popd: popd [-n] [+N | -N] pushd: pushd [-n] [+N | -N | dir]
目錄切換的命令
popd命令用於刪除目錄棧中的記錄;如果popd命令不加任何參數,則會先刪除目錄棧最上面的記錄,然後切換到刪除過後的目錄棧中的最上面的目錄。
pushd命令是將目錄加入命令堆疊中。如果指令沒有指定目錄名稱,則會將當前的工作目錄置入目錄堆疊的最頂端。置入目錄如果沒有指定堆疊的位置,也會置入目錄堆疊的最頂端,同時工作目錄會自動切換到目錄堆疊最頂端的目錄去。
- +N:將第N個目錄刪除(從左邊數起,數字從0開始);
- -N:將第N個目錄刪除(從右邊數起,數字從0開始);
- -n:將目錄出棧時,不切換目錄。
root@npt1800:/sdlog/syslog# pushd /sdlog
/sdlog /sdlog/syslog
root@npt1800:/sdlog# pushd /sdboot
/sdboot /sdlog /sdlog/syslog
root@npt1800:/sdboot# pushd /sddata
/sddata /sdboot /sdlog /sdlog/syslog
root@npt1800:/sddata# popd
/sdboot /sdlog /sdlog/syslog
root@npt1800:/sdboot# popd
/sdlog /sdlog/syslog
root@npt1800:/sdlog# popd
/sdlog/syslog
root@npt1800:/sdlog/syslog# popd
-su: popd: directory stack empty
29. printf
printf: printf [-v var] format [arguments]
格式化輸出
可以對照python的格式化輸出。但有些不同。參考http://blog.chinaunix.net/uid-9525959-id-2001528.html
30. pwd
pwd: pwd [-LP]
列印當前路徑。
- -L:--logical,顯示當前的路徑,有連接文件時,直接顯示連接文件的路徑,(不加參數時默認此方式)
- -P:--physical,顯示當前的路徑,有連接文件時,不使用連接路徑,直接顯示連接文件所指向的文件
31. read
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
相當於python的input,用來接收輸入值。
- -a :將內容讀入到數組中
- -d :delimiter,讀到該值意味輸入結束
- -n :用於限定最多可以有多少字元可以作為有效讀入。
- -p :用於給出提示輸入
- -r :指定讀取命令把一個 (反斜杠) 處理為輸入行的一部分,而不把它作為一個控制字元,我們可以使用』』表示沒有輸入完,換行繼續輸入,如果我們需要行最後的』/』作為有效的字元,可以通過-r來進行。此外在輸入字元中,我們希望
這類特殊字元生效,也應採用-r選項。 - -s :不將輸入值列印出來(輸入密碼時候不想直接把密碼列印出來吧)
- -t :用於表示等待輸入的時間,單位為秒,等待時間超過(退出狀態值為128),將繼續執行後面的腳本,注意不作為null輸入,參數將保留原有的值。
root@npt1800:/sdlog/syslog# read -p"Who are you?
" -t 5 name
Who are you?
KD
root@npt1800:/sdlog/syslog# echo $name
KD
32. readonly
readonly: readonly [-aAf] [name[=value] ...] or readonly -p
readonly命令用於定義只讀shell變數和shell函數。readonly命令的選項-p可以輸出顯示系統中所有定義的只讀變數。
- -f:定義只讀函數;
- -a:定義只讀數組變數;
- -p:顯示系統中全部只讀變數列表。
root@npt1800:/sdlog/syslog# readonly -p
declare -r BASHOPTS="cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -ar BASH_VERSINFO=([0]="4" [1]="2" [2]="10" [3]="2" [4]="release" [5]="powerpc-wrs-linux-gnu")
declare -ir EUID="0"
declare -ir PPID="9431"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID="0"
root@npt1800:/sdlog/syslog# readonly a=(1 2 3)
root@npt1800:/sdlog/syslog# readonly -p
declare -r BASHOPTS="cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -ar BASH_VERSINFO=([0]="4" [1]="2" [2]="10" [3]="2" [4]="release" [5]="powerpc-wrs-linux-gnu")
declare -ir EUID="0"
declare -ir PPID="9431"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID="0"
declare -ar a=([0]="1" [1]="2" [2]="3")
root@npt1800:/sdlog/syslog#
33. return
return: return [n]
正常退出進程的一種方法。 與之類似的還有exit, _exit。具體區別請參考"LINUX退出當前進程——比較return、exit()和_exit()函數"
34. set
set: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
這個命令在腳本中很常用,用來定義腳本中的變數及錯誤處理行為。如果不加參數直接運行set,會返回當前shell的所有變數。 舉幾個在腳本常用的申明。
- set -u:若遇到不存在的變數則會報錯;
- set -e:只要腳本發生錯誤就終止腳本運行;
- set -x:列印命令結果前列印該命令;
- set -o pipefail:設置了這個選項以後,包含管道命令的語句的返回值,會變成最後一個返回非零的管道命令的返回值。只要一個子命令失敗,整個管道命令就失敗。
- set +(uexo):與上面的結果想法,用來關閉。
35. shift
shift: shift [n]
用來調整位置參數。n為複數或不存在則返回錯誤。
位置參數可以用shift命令左移。比如shift 3表示原來的$4現在變成$1,原來的$5現在變成$2等等,原來的$1、$2、$3丟棄,$0不移動。不帶參數的shift命令相當於shift 1。
root@npt1800:/sdlog/syslog# vi test_shift.sh
set -e
until [ $# -eq 0 ]
do
echo "First argument is: $1 .The number of arguments is $#"
shift
done
root@npt1800:/sdlog/syslog# . test_shift.sh 1 2 3 4
First argument is: 1 .The number of arguments is 4
First argument is: 2 .The number of arguments is 3
First argument is: 3 .The number of arguments is 2
First argument is: 4 .The number of arguments is 1
36. shopt
shopt: shopt [-pqsu] [-o] [optname ...]
shopt命令用於顯示和設置shell中的行為選項,通過這些選項以增強shell易用性。shopt命令若不帶任何參數選項,則可以顯示所有可以設置的shell操作選項。具體裡面每一項有什麼作用,該興趣的童鞋可以移步"linux系統命令 shopt"
- -s:激活指定的shell行為選項;
- -u:關閉指定的shell行為選項。
- -p:用於列出所有
root@npt1800:/sdlog/syslog# shopt
autocd off
cdable_vars off
cdspell off
checkhash off
checkjobs off
checkwinsize off
cmdhist on
compat31 off
compat32 off
compat40 off
compat41 off
dirspell off
dotglob off
execfail off
expand_aliases on
extdebug off
extglob off
extquote on
failglob off
force_fignore on
globstar off
gnu_errfmt off
histappend off
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lastpipe off
lithist off
login_shell on
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo off
37. source
source: source filename [arguments]
在當前shell執行腳本或命令(就是.file)。區別於sh file和./path/file的執行方式(開啟一個「紫禁城」)
38. suspend
suspend: suspend [-f]
suspend為shell內建指令,可暫停目前正在執行的shell。若要恢復,則必須使用SIGCONT信息。
-f : 若目前執行的shell為登入的shell,則suspend預設無法暫停此shell。若要強迫暫停登入的shell,則必須使用-f參數。
root@npt1800:/sdlog/syslog# suspend
-su: suspend: cannot suspend a login shell
bash-4.2$ su - root
root@npt1800:~# suspend -f
[1]+ Stopped su - root
bash-4.2$ fg %1
su - root
root@npt1800:~#
推薦閱讀: