九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
bash內部命令
 bash命令解釋套裝程序包含了一些內部命令。內部命令在目錄列表時是看不見的,它們由Shell本身提供。常用的內部命令有:echo, eval, exec, export, readonly, read, shift, wait和點(.)。下面簡單介紹其命令格式和功能。
1.echo
命令格式:echo arg
功能:在屏幕上顯示出由arg指定的字串。
2.eval
命令格式:eval args
功能:當Shell程序執(zhí)行到eval語句時,Shell讀入?yún)?shù)args,并將它們組合成一個新的命令,然后執(zhí)行。
3.exec
命令格式:exec命令參數(shù)
功能:當Shell執(zhí)行到exec語句時,不會去創(chuàng)建新的子進程,而是轉去執(zhí)行指定的命令,當指定的命令執(zhí)行完時,該進程(也就是最初的Shell)就終止了,所以Shell程序中exec后面的語句將不再被執(zhí)行。
4.export
命令格式:export變量名 或:export變量名=變量值
功能:Shell可以用export把它的變量向下帶入子Shell,從而讓子進程繼承父進程中的環(huán)境變量。但子Shell不能用export把它的變量向上帶入父Shell。
注意:不帶任何變量名的export語句將顯示出當前所有的export變量。
5.readonly
命令格式:readonly變量名
功能:將一個用戶定義的Shell變量標識為不可變。不帶任何參數(shù)的readonly命令將顯示出所有只讀的Shell變量。
6.read
命令格式:read變量名表
功能:從標準輸入設備讀入一行,分解成若干字,賦值給Shell程序內部定義的變量。
7.shift語句
功能:shift語句按如下方式重新命名所有的位置參數(shù)變量,即$2成為$1,$3成為$2…在程序中每使用一次shift語句,都使所有的位置參數(shù)依次向左移動一個位置,并使位置參數(shù)$#減1,直到減到0為止。
8.wait
功能:使Shell等待在后臺啟動的所有子進程結束。wait的返回值總是真。
9.exit
功能:退出Shell程序。在exit之后可有選擇地指定一個數(shù)位作為返回狀態(tài)。
10.source 或“.”(點)
命令格式:source Shell程序文件名 或 . Shell程序文件名
功能:在當前的shell中強制執(zhí)行.sh腳本,而不是新建一個子shell在子shell中執(zhí)行。從指定的shell 文件中讀入所有命令語句并在當前進程中執(zhí)行。強制執(zhí)行,忽略權限,可以改變父shell的環(huán)境。與直接調用./Shell程序文件名的區(qū)別:接調用./Shell程序文件名來執(zhí)行shell是在一個子shell里運行的,執(zhí)行后結果并沒有反應到父shell里,不過source不同,他就是在本shell中執(zhí)行的,運行結果會改變當前shell的環(huán)境,所以能看到結果。

內建的命令包含在shell本身里面。當內建的命令的名字被用作一個簡單命令的第一個詞時,shell 直接執(zhí)行那個命令,而不創(chuàng)建新的進程。內建命令在實現(xiàn)那些單獨的程序不可能或者不便實現(xiàn)的某些功能時時很有必要的,bash支持3種內建的命令:

*Bourne Shell內建命令:
:, ., break, cd, continue, eval, exec, exit, export, getopts, hash, pwd, readonly, return, set, shift, test, [, times, trap, umask and unset.

*Bash內建命令:
alias, bind, builtin, command, declare, echo, enable, help, let, local, logout, printf, read, shopt, type, typeset, ulimit and unalias.

*特殊內建命令:
當Bash在POSIX模式運行,特殊內建命令和其他內建命令有3個方面的區(qū)別:
1.特殊內建命令在shell函數(shù)在命令查找期間先被找到。
2.如果一個特殊內建命令返回一個錯誤狀態(tài),一個非交互shell就會退出。
3.在命令完成后在該命令之前的賦值語句仍然在shell環(huán)境中起作用。

POSIX特殊內建命令是::, ., break, continue, eval, exec, exit, export, readonly, return, set, shift, trap and unset.

簡單的對應關系簡單描述如下:
* .: 把SHELL腳本當作當前進程的一部分執(zhí)行.
* :: 返回0或者true.
* [: Bourne Shell Builtins.
* alias: 別名.
* bg: 在后臺放置一個掛起的任務.
* bind: Bash Builtins.
* break: 從一個循環(huán)控制結構中退出.
* builtin: Bash Builtins.
* cd: 改變到其它的工作目錄.
* command: Bash Builtins.
* compgen: Programmable Completion Builtins.
* complete: Programmable Completion Builtins.
* continue: 直接轉到循環(huán)的下一次迭代的開始處.
* declare: 聲名變量.
* dirs: Directory Stack Builtins.
* disown: Job Control Builtins.
* echo: 顯示出它后邊的參數(shù).
* enable: Bash Builtins.
* eval: 掃描并計算命令行.
* exec: 執(zhí)行一個shell腳本或者程序并替換掉當前進程.
* exit: 從當前的shell中退出.
* export: 把一個變量的值放在被調用的環(huán)境中(輸出變量).
* fc: Bash History Builtins.
* fg: 把一個在后臺執(zhí)行的程序提交到前臺.
* getopts: 分析一個shell腳本的參數(shù).
* hash: Bourne Shell Builtins.
* help: Bash Builtins.
* history: 查看執(zhí)行命令的歷史記錄.
* jobs: 顯示后臺任務的列表.
* kill: 給一個進程或者作業(yè)發(fā)送一個信號.
* let: 數(shù)學計算后面的表達式的值.
* local: 聲明局部變量.
* logout: 登出shell.
* popd: 目錄棧出棧.
* printf: Bash Builtins.
* pushd: 目錄棧入棧.
* pwd: 顯示工作目錄.
* read: 從標準輸入中讀入一行.
* readonly: 把一個變量名為只讀.
* return: 返回值.
* set: 設置shell標志或命令行參數(shù)變量,如不加參數(shù)則列出所有變量.
* shift: 提升每個命令行參數(shù).
* shopt: Bash Builtins.
* source: Bash Builtins.
* suspend: Job Control Builtins.
* test: 參數(shù)比較.
* times: 顯示當前shell以及其子進程的運行時間.
* trap: 捕獲一個信號.
* type: 顯示出每個參數(shù)怎樣被解釋為一個命令.
* typeset: 聲名變量同declare.
* ulimit: Bash Builtins.
* umask: 返回文件創(chuàng)建時的掩碼值.
* unalias: 刪除別名.
* unset: 刪除一個變量或者函數(shù).
* wait: 等待后臺進程的結束.

簡單應用描述:
: [arguments] 
不做任何事,除了[arguments]一些參數(shù)展開及一些特定重導向的作業(yè)外。永遠返回零,它的用法跟true一樣。 
*************************
. filename [arguments] 
source filename [arguments] 
由filename中讀取命令,并執(zhí)行。 
您會在/etc/rc.d/*中發(fā)現(xiàn)很多 
. /xxxx 
的指令,而xxxx的permission都不是可執(zhí)行的。事實上,在tcsh中,需要用 
source /xxxx 
來做同樣的指令?!?br>注意到"."的后面是有空格的(比較一下". /"跟"./",不一樣)。filename是內含指令的純文字檔即可,無須chmod 755 filename?!?br>例
filename : my_source 
DEV=lo 
IP=127.0.0.1 
NETMASK=255.0.0.0 
BROADCAST=127.255.255.255 

ifconfig $IP netmask $NETMASK broadcast $BROADCAST dev $DEV 

接下來 
. my_source 
或 
source my_source 

便可執(zhí)行該script,而不需要"chmod 755 my_source" 

*************************
alias [name[=value] ...] 
昵稱命令 
例如您如果來自DOS的世界,對UNIX的指令不習慣,可用alias來修改,以符合您的習慣?!?br>

alias ls="ls --color" 
alias dir="ls" 
alias cd..="cd .." 
alias copy="cp -f" # dangerous, recommend, "cp -i" 
alias del="rm -f" # dangerous, recommend, "rm -i" 
alias move="mv -f" # dangerous, recommend, "mv -i" 
alias md="mkdir" 
alias rd="rmdir" 

*************************
unalias [-a] [name ...] 
unalias取消alias的設定。"unalias -a"將全部alias取消。 


unalias copy 

*************************
bg [jobspec] 
將指定任務放到背景中,如果 jobspec未指定,內定為目前的。 

*************************
fg [jobspec] 
將指定任務放到前景中,如果 jobsepc沒有指定,那么內定為目前的?!?br>
*************************
jobs [-lnp] [ jobspec ... ] 
第一種形式列出目前正在工作的任務?!?br>-l : 除了列出一般資訊外,還列出Process IDs?!?br>-p : 僅列出該工作群"首腦"(Process group leader)的Process ID. 
-n : 則僅列出有改變的jobs的狀態(tài)?!?br>如果給定jobspec,輸出資訊則只有該jobspec?!?br>
返回值為零,除非有非法的選項發(fā)生?!?br>
jobs -x command [ args ... ] 

如果使用第二種形式(-x),jobs取代指定的command及args,并執(zhí)行返回其Exit Status?!?br>
*************************
kill [-s sigspec | -sigspec] [pid | jobspec] ... 
將sigspec的信號送到pid或jobspec?!?br>sigspec可以是 SIGKILL/KILL這種形式或是信號號碼。如果sigspec是signal name,則大小寫無關,而且可以沒有SIG?!?br>kill -l [signum] 
列出信號名稱?!?br>
[foxman@foxman bash]# kill -l 
1) SIGHUP    2) SIGINT    3) SIGQUIT   4) SIGILL 
5) SIGTRAP   6) SIGIOT    7) SIGBUS    8) SIGFPE 
9) SIGKILL   10) SIGUSR1   11) SIGSEGV   12) SIGUSR2 
13) SIGPIPE   14) SIGALRM   15) SIGTERM   17) SIGCHLD 
18) SIGCONT   19) SIGSTOP   20) SIGTSTP   21) SIGTTIN 
22) SIGTTOU   23) SIGURG   24) SIGXCPU   25) SIGXFSZ 
26) SIGVTALRM  27) SIGPROF   28) SIGWINCH  29) SIGIO 
30) SIGPWR 

*************************
wait [n] 
等待指定的行程,并返回其結束狀態(tài)。n可以是個jobspec或Process ID。如果n未指定,則等待所有的子行程,及返回值為零。若n為不存在的job或process,則返回127。否則,返回值為最后一個 job/process的Exit Status。 

*************************
bind [-m keymap] [-lvd] [-q name] 
bind [-m keymap] -f filename 
bind [-m keymap] keyseq:function-name 
顯示出目前readline的按鍵及鏈結函數(shù)設定或是巨集?!?br>
-m keymap : 設定keymap binding?!?br>-l : 顯示出所有readline function的名稱?!?br>-v : 顯示出目前的function name及bindings?!?br>-d : 顯示出function name及bindings?!?br>-f filename : 從filename讀取key bindings?!?br>-q function : 詢問那個按鍵觸發(fā)function?!?br>
*************************
break [n] 
跳出控制回圈for/while /until中使用。如果有指定n,則跳出n層。n必須是大于等于1。若n大于巢狀圈數(shù),則所有的圈都會跳離。返回值回零。 

*************************
continue [n] 
還原控制回圈for/while /until中使用。如果有指定n,則返回n層。n必須是大于等于1。若n大于巢狀圈數(shù),則還原到最上層。返回值回零?!?br>
*************************
exit [n] 
離開程式。n是Exit Status?!?br>
*************************
return [n] 
在function中使用。n為返回值,其作用與Exit Status一樣。 

*************************
builtin shell-builtin [arguments] 
執(zhí)行內建函數(shù)。當您定義了與內建函數(shù)相同的指令時,可用此命令來執(zhí)行內建函數(shù)?!?br>
*************************
cd [dir] 
更換目錄到dir。如果沒有指定,內定為 HOME所指定的目錄?!?br>
*************************
command [-pVv] command [arg ...] 
用command指定可取消正常的shell function尋找。只有內建命令及在PATH中找得到的才會被執(zhí)行。"-p"選項,搜尋命令的方式是用PATH來找。"-V"或"-v"選項,會顯示出該命令的一些簡約描述?!?br>
*************************
declare [-frxi] [name[=value]] 
typeset [-frxi] [name[=value]] 
宣告參數(shù)并給它們設定屬性。如果沒有給定名稱,將會顯示各參數(shù)值。 

-f : 僅使用函數(shù)名稱。 
-r : 將name設為readonly?!?br>-x : 將name輸出給后續(xù)環(huán)境使用?!?br>-i : 該參數(shù)被設為integer來使用,可用于算術表述?!?br>
用"+"時,關閉該屬性?!?br>
*************************
dirs [-l] [+/-n] 
顯示目前記憶的目錄。目錄可透過pushd/popd來操作。 

+n : 顯示開始的記錄n個?!?br>-n : 顯示結尾的記錄n個?!?br>-l : 顯示較多的資訊?!?br>
*************************
echo [-neE] [arg ...] 
輸出顯示 args,由空白分隔。返回值永為零?!?br>
-n : 不跳行?!?br>-e : 啟動"\"符號的解譯?!?br>-E : 將ESC解譯功能取消?!?br>
"\a" : alert(bell),發(fā)出聲響?!?br>"\b" : backspace,倒退?!?br>"\c" : suppress trailing newline,不跳行?!?br>"\f" : form feed,跳行跳格?!?br>"\n" : new line,新行?!?br>"\r" : carriage return,回到行起點?!?br>"\t" : horizontal tab,水平跳位?!?br>"\v" : vertical tab,垂直跳位?!?br>"\\" : 輸出"\"?!?br>"\nnn" : 輸出ASCII Code號碼nnn(八進位)?!?br>
*************************
enable [-n] [-all] [name ...] 
啟動或關閉內建函數(shù)命令。使用"-n"將所有指定命令皆關閉,否則都是啟動的。如果只有"-n"參數(shù),它將會顯示所有關閉的函數(shù)。如果只有"-all",它將會顯示所有內建命令?!?br>
*************************
eval [arg ...] 
讀取args,并將args合為一個命令,然后執(zhí)行。其返回值成為eval的返回值。如果沒有參數(shù),eval返回True。 

*************************
exec [[-] command [arguments]] 
當命令執(zhí)行時,該命令取代shell,沒有新的process產(chǎn)生。如果第一個參數(shù)是"-",shell會將"-"放入第零個參數(shù),傳給 command?!?br>
*************************
export [-nf] [name[=word]] ... 
export -p 
將name輸出給環(huán)境,給往后的命令使用。"-f"選項表示name是函數(shù)。"-p"顯示出所有export的名稱。"-n"移除name?!?br>
*************************
set [--abefhkmnptuvxldCHP] [-o option] [arg ...] 
-a : 自動將變數(shù)標記為可讓后面環(huán)境所使用?!?br>-b : 立即報告被終結的背景程式狀態(tài)?!?br>-e : 當命令(simple-command,見后面)返回非零值時,立即跳出。 
-f : 取消pathname expansion?!?br>-h : 找出所記憶的函數(shù)命令位置?!?br>-k : 所有keyword參數(shù)都放到環(huán)境中?!?br>-m : 監(jiān)督模式?!?br>-n : 讀取命令,但不要執(zhí)行。可用于語法檢查?!?br>-p : 打開privileged模式。 
-t : 當讀取一個命令并執(zhí)行后,立即離開?!?br>-u : 當參數(shù)展開時,把unset參數(shù)當成是錯誤?!?br>-v : 列出shell input lines?!?br>-x : 在展開每個simple-command后,bash顯示展開值在PS4上。 
-l : 儲存并還原name binding在for語法中。 
-d : 關閉hasing command搜尋?!?br>-C : 跟`noclobber=`一樣。請見內定參數(shù)一節(jié)?!?br>-H : 啟動! style history substitution。 
-P : 在使用像cd這種指令時,不要跟隨symbolic links?!?br>-- : "--"之后,沒有參數(shù)跟在后面?!?br>- : 指定將所有后面的參數(shù)當成是位置參數(shù)?!?br>-o option-name : option-name可以是以下之一 
allexport : 與"-a"相同?!?br>braceexpand : 啟動Brace Expansion。這是內定設定。 
emacs : 使用emacs-style命令列編輯界面?!?br>errexit : 與"-e"相同?!?br>histexpand : 與"-H"相同。 
ignoreeof : 效果跟`IGNOREEOF=10`一樣?!?br>interactive-commands : 允許#做為解?!?br>monitor : 與"-m"相同?!?br>noclobber : 與"-C"相同?!?br>noexec : 與"-n"相同?!?br>noglob : 與"-f"相同。 
nohash : 與"-d"相同。 
notify : 與"-b"相同?!?br>nounset : 與"-u"相同?!?br>physical : 與"-P"相同。 
posix : Bash行為修改為Posix 1003.2標準?!?br>privileged : 與"-p"相同。 
verbose : 與"-v"相同?!?br>vi : 使用vi-style命令列編輯程式?!?br>xtrace : 與"-x"相同?!?br>
*************************
unset [-fv] [name ...] 
移除對映于 name的參數(shù)。要注意PATH、IFS、PPID、PS1、PS2、UID、EUID不能unset。若RANDOM、SECONDS、LINENO、 HISTCMD被unset,它們會喪失原有意義,既始它們后來被重設也一樣。返回值為True,除非name是不能被unset的?!?br>
*************************
fc [-e ename] [-nlr] [first] [last] 
fc -s [pat=rep] [cmd] 
修正命令?!?br>
*************************
getopts optstring name [args] 
解析位置參數(shù)?!?br>
*************************
help [pattern] 
顯示協(xié)助資訊?!?br>
*************************
history [n] 
history -rwan [filename] 
沒有參數(shù)時,會顯示所下命令的歷史記錄。帶有參數(shù)"n"則顯示最后n個。 

其它參數(shù)如下: 
-a : 新增"新歷史"到歷史檔中?!?br>-n : 讀取尚未讀到歷史中的記錄。 
-r : 讀取filename做為歷史檔,并用它為目前歷史記錄?!?br>-w : 將現(xiàn)有歷史記錄寫到filename中。 

*************************
let arg [arg ...] 
算術表述。請參考算術表述一節(jié)?!?br>
*************************
local [name[=value] ...] 
產(chǎn)生一個局部參數(shù)。如果用于function,則其作用圍在function內及其子函數(shù)。 

*************************
logout 
離開login shell。 

*************************
popd [+/-n] 
移除目錄堆疊。"+n"移除上面n 個,"-n"移除下面n個?!?br>
*************************
pushd [dir] 
pushd +/-n 
將目錄新增到目錄堆疊的最上面。"+n"旋轉該堆疊,使第n個目錄變成最上面。"-n"旋轉該堆疊,使倒數(shù)第n個目錄變成最上面?!?br>
*************************
pwd 
列出目前工作目錄的絕對路徑?!?br>
*************************
read [-r] [name ...] 
讀進一行,然后第一個字設到第一個name,第二個設到第二個name,依此類推。如果沒有name在參數(shù)中,則read會將值設到REPLY。返回值為零,除非遇到 End-Of-File。若有"-r"選項,則"\n"被考慮為該行的一部份?!?br>
*************************
readonly [-f] [name ...] 
readonly -p 
將給定的name標記為readonly。如果是"-f"選項,則函數(shù)也一樣被標記為readonly。"-p"會列出所有readonly的name。"--"取消檢查剩余的參數(shù)?!?br>
*************************
shift [n] 
Positional Parameters從n+1...開始,會被改為$1...。n若為零,則沒有改變。n若未給定,則內定為1。n必須是非負數(shù),并且小于或等于$#。若 n大于$#,則沒有改變。返回值為零,除非n大于$#或小于零?!?br>
*************************
suspend [-f] 
暫停這個shell的執(zhí)行,直到它收到SIGCONT信號。"-f"選項則是叫l(wèi)ogin shell不要抱怨,不過還是一樣暫停。返回狀態(tài)零,除非該shell是個login shell,而且沒有"-f"選項?!?br>
*************************
test expr 
[ expr ] 
我們在 Exit Status的部份已經(jīng)說過了,不再重?!?br>
*************************
times 
列出該shell的累積的使用者及系統(tǒng)時間及從 shell執(zhí)行的process時間,返回值為零?!?br>
------------------------------------------------------------------------------
trap [-l] [arg] [sigspec] 
當收到sigspec信號時,執(zhí)行arg命令。"-l"顯示出信號名稱及號碼?!?br>
*************************
type [-all] [-type | -path] name [name ...] 
沒有參數(shù)的狀況下,它會顯示出shell如何解譯name做為命令。如果有"-type",它將會顯示alias、 keyword、function、builtin或file。如果有"-path"的參數(shù),它將會顯示該命令的路徑,找不到的話,不顯示任何東西。如果有"-all"的參數(shù),它將會顯示所有可執(zhí)行name的可能路徑。type接受"-a"、"-t"、"-p"做為縮寫?!?br>
*************************
ulimit [-SHacdfmstpnuv [limit]] 
ulimit提供了對shell的可獲取資源控制的功能?!?br>
-a : 報告目前所有限制?!?br>-c : 設定最大可產(chǎn)生的core檔案?!?br>-d : 行程資料段(process's data segment)最大值。 
-f : 可被這個shell產(chǎn)生的最大檔案。 
-m : resident set size最大值?!?br>-s : 堆疊最大值?!?br>-t : CPU TIME最大值(以秒計算)?!?br>-p : pipe size in 512-byte blocks的最大值?!?br>-n : 可開啟的file descriptors最大值?!?br>-u : 單一使用者可使用的最大process數(shù)?!?br>-v : 該shell最大虛擬記憶體可用值?!?br>
所有項目是以1024做為單位?!?br>
*************************
umask [-S] [mode] 
將使用者的file- creation mask設為mode。"-S"選項將mask印成符號形式。

--------------------示例應用------------------------
####################################################
使用內置的set和shopt命令設置bash選項
set命令可以用來定制shell環(huán)境,使用選項“o”來打開或者關閉選項。例如打開選項:set -o 選項,關閉選項目:set +o 選項。例如要打開vi交互式命令行編輯,則如下:

debian:~# set -o   #查看當前設置情況
allexport          off
braceexpand        on
emacs              on
errexit            off
errtrace           off
functrace          off
hashall            on
histexpand         on
history            on
ignoreeof          off
interactive-comments    on
keyword            off
monitor            on
noclobber          off
noexec             off
noglob             off
nolog              off
notify             off
nounset            off
onecmd             off
physical           off
pipefail           off
posix              off
privileged         off
verbose            off
vi                 off    #關閉中
xtrace             off

[root@localhost ~]# set -o vi   #把vi選項打開

內置set命令選項
選項名     快捷開關     含義
allexport     -a     從這個選項中被設置開始就自動標明要輸出的新變量或修改過的變量,直至選項被復位
braceexpand     -B     打開花括號擴展,它是一個默認設置
emacs           使用emacs內置編輯器進行命令行編輯,是一個默認設置
errexit     -e     當命令返回一個非零退出狀態(tài)(失敗)時退出。讀取初始化文件時不設置
histexpand     -H     執(zhí)行歷史替換時打開!和!!擴展,是一個默認設置
history           打開命令行歷史、默認為打開
ignoreeof           禁止用EOF(Ctrl+D)鍵退出shell。必須鍵入exit才能退出。等價于設置shell變量IGNOREEOF=10
keyword     -k     將關鍵字參數(shù)放到命令的環(huán)境中
interactive-comments           對于交互式shell,把#符后面的文本作為注釋
monitor     -m     設置作業(yè)控制
noclobber     -C     防止文件在重定向時被重寫
noexec     -n     讀命令,但不執(zhí)行。用來檢查腳本的語法。交互式運行時不開啟
noglob     -d     禁止用路徑名擴展。即關閉通配符
notify     -b     后臺作業(yè)完成時通知用戶
nounset     -u     擴展一個未設置的變量時顯示一個錯誤信息
onecmd     -t     在讀取和執(zhí)行命令后退出
physical     -P     設置時,在鍵入cd或pwd禁止符號鏈接。用物理目錄代替
privileged     -p     設置后,shell不讀取.profile或ENV文件,且不從環(huán)境繼承shell函數(shù),將自動為setuid腳本開啟特權
verbose     -v     為調試打開verbose模式
vi           使用vi內置編輯器進行命令行編輯
xtrace     -x     為調試打開echo模式

####################################################     
shopt命令是set命令的一種替代,很多方面都和set命令一樣,但它增加了很多選項??捎惺褂谩?p”選項來查看shopt選項的設置?!?u”開關表示一個復位的選項,“-s”表示選項當前被設置。

debian:~# shopt -p    #查看當前設置情況
shopt -u cdable_vars
shopt -u cdspell
shopt -u checkhash
shopt -u checkwinsize
shopt -s cmdhist
shopt -u compat31
shopt -u dotglob
shopt -u execfail
shopt -s expand_aliases
shopt -u extdebug
shopt -u extglob
shopt -s extquote
shopt -u failglob
shopt -s force_fignore
shopt -u gnu_errfmt
shopt -u histappend
shopt -u histreedit
shopt -u histverify
shopt -s hostcomplete
shopt -u huponexit
shopt -s interactive_comments
shopt -u lithist
shopt -s login_shell
shopt -u mailwarn
shopt -u no_empty_cmd_completion
shopt -u nocaseglob
shopt -u nocasematch
shopt -u nullglob
shopt -s progcomp
shopt -s promptvars
shopt -u restricted_shell
shopt -u shift_verbose
shopt -s sourcepath
shopt -u xpg_echo

[root@localhost ~]# shopt -s cdspell   #把cdspell選項打開
[root@localhost ~]# shopt -p cdspell    #打印cdspell設置
shopt -s cdspell
[root@localhost ~]# cd /raot            #故意拼寫錯誤
/root
[root@localhost ~]# pwd                 #查看當前目錄
/root
[root@localhost ~]# cd /usr/loca/bin   # 故意拼寫錯誤
/usr/local/bin
[root@localhost bin]# pwd               #查看當前目錄  
/usr/local/bin
[root@localhost bin]# shopt -u cdspell #把cdspell選項打開
[root@localhost bin]# shopt -p cdspell #打印cdspell設置
shopt -u cdspell
[root@localhost bin]# cd /raot         #故意拼寫錯誤
-bash: cd: /raot: 沒有那個文件或目錄     #進入目錄錯誤

shopt命令選項
選項     含義
cdable_vars     如果給cd內置命令的參數(shù)不是一個目錄,就假設它是一個變量名,變量的值是將要轉換到的目錄
cdspell     糾正cd命令中目錄名的較小拼寫錯誤。檢查的錯誤包括顛倒順序的字符,遺漏的字符以及重復的字符。如果知道一處修改,正確的路徑就打印出,命令將繼續(xù)。只用于交互式shell
checkhash     bash在試圖執(zhí)行一個命令前,先在哈希表中尋找,以確定命令是否存在。如果命令不存在,就執(zhí)行正常路徑搜索
checkwinsize     bash在每個命令后檢查窗口大小,如果有必要,就更新LINES和COLUMNS的值
cmdhist     bash試圖將一個多行命令的所有行保存在同一個歷史項中。這使得多行命令的重新編輯更方便
dotglob     bash在文件名擴展的結果中包括以點(.)開頭的文件名
execfail     如果一個交互式shell不能執(zhí)行指定給exec內置命令作為參數(shù)的文件,它不會退出。如果exec失敗,一個交互式shell不會退出
expand_aliases     別名被擴展。默認為打開
extglob     打開擴展的模式匹配特征(正常的表達式元字符來自Korn shell的文件名擴展)
histappend     當shell退出時,歷史清單將添加到以HISTFILE變量的值命名的文件中,而不是覆蓋文件
histreedit     如果readline正被使用,用戶有機會重新編輯一個失敗的歷史替換
histverify     如果設置,且readline正被使用,歷史替換的結果不會立即傳遞給shell解析器。而是將結果行裝入readline編輯緩沖區(qū)中,允許進一步修改
hostcomplete     如果設置,且readine正被使用,當正在完成一個包含@的詞時bash將試圖執(zhí)行主機名補全。默認為打開
huponexit     如果設置,當一個交互式登陸shell退出時,bash將發(fā)送一個SIGHUP(掛起信號)給所有的作業(yè)
interactive_comments     在一個交互式shell中,允許以#開頭的詞以及同一行中其他的字符被忽略。默認為打開
lithist     如果打開,且cmdhist選項也打開,多行命令將用嵌入的換行符保存到歷史中,而無需在可能的地方用分號來分隔
mailwarn     如果設置,且bash用來檢查郵件的文件自從上次檢查后已經(jīng)被訪問,將顯示消息“The mail in mailfile has been read”
nocaseglob     如果設置,當執(zhí)行文件名擴展時,bash在不區(qū)分大小寫的方式下匹配文件名
nullglob     如果設置,bash允許沒有匹配任何文件的文件名模式擴展成一個空串,而不是它們本身
promptvars     如果設置,提示串在被擴展后再經(jīng)歷變量和參量擴展。默認為打開
restricted_shell     如果shell在受限模式下啟動就設置這個選項。該值不能被改變。當執(zhí)行啟動文件時,不能復位該選項,允許啟動文件發(fā)現(xiàn)shell是否是受限的
sourcepath     如果設置,source內置命令使用PATH的值來尋找包含作為參數(shù)提供的文件的目錄。默認為打開
source     點(.)的同義詞
shift_verbose     如果該選項設置,當移動計數(shù)超過位置參量個數(shù)時,shift內置命令將打印一個錯誤消息
####################################################
trap -- 捕捉信號
簡介
查看信號

$ kill -l
查看當前信號綁定

$ stty -a
trap 處理信號

trap 在 bash 中是一個內置命令:
$ type trap
trap is a shell builtin

用法如下 (man trap 中搜索 trap):
trap [-lp] [[arg] sigspec ...]

-l
作用同 "kill -l" 列出所有信號
-p
輸出當前和各個信號綁定的“命令”
arg
如果是空字符串,那么就執(zhí)行捕捉到的后面列表中的信號的本來行為;如果 arg 不知空字符串,當捕捉到后面信號列表中的信號時就執(zhí)行此命令。
sigspec
可以是多個 "trap -l" (或 "kill -l") 輸出的信號列表中的信號名或信號數(shù)字值

$ trap hello EXIT  # 綁定 EXIT 信號發(fā)生后的執(zhí)行程序為 hello (trap 只管綁定,不管是否存在。
$ trap -p  # 輸出當前有那些綁定
trap -- 'hello' EXIT

trap捕捉到信號之后,可以有三種反應方式:
* 執(zhí)行一段程序來處理這一信號
* 接受信號的默認操作
* 忽視這一信號

調用程序處理信號
trap commands signal-list

常見信號
HUP(1)     掛起,通常因終端掉線或用戶退出而引發(fā)
INT(2)     中斷,通常因按下Ctrl+C組合鍵而引發(fā)
QUIT(3)     退出,通常因按下Ctrl+\組合鍵而引發(fā)
ABRT(6)     中止,通常因某些嚴重的執(zhí)行錯誤而引發(fā)
ALRM(14)     報警,通常用來處理超時
TERM(15)     終止,通常在系統(tǒng)關機時發(fā)送
####################################################
type -- Describe a command, for each name, indicate how it would be interpreted if used as a command name.
type [-tpa] name
參數(shù):
:不加任何參數(shù)時,則 type 會顯示出那個 name 是外部指令還是 bash 內建的指令!
-t  :當加入 -t 參數(shù)時,type 會將 name 以底下這些字眼顯示出他的意義:
file    :表示為外部指令;
alias   :表示該指令為命令別名所設定的名稱;
builtin :表示該指令為 bash 內建的指令功能;
-p  :如果后面接的 name 為指令時,會顯示完整檔名(外部指令)或顯示為內建指令;
-a  :會將由 PATH 變數(shù)定義的路徑中,將所有含有 name 的指令都列出來,包含 alias
范例:
范例一:查詢一下 ls 這個指令是否為 bash 內建?
[root@linux ~]# type ls
ls is aliased to `ls --color=tty'
# 沒有加上任何參數(shù),僅列出 ls 這個指令的最主要使用情況
[root@linux ~]# type -t ls
alias
# -t 參數(shù)則僅列出 ls 這個指令的最主要使用情況說明
[root@linux ~]# type -a ls
ls is aliased to `ls --color=tty'
ls is /bin/ls
# 利用所有方法找出來的 ls 相關資訊都會被列出來!

范例二:那么 cd 呢?
[root@linux ~]# type cd
cd is a shell builtin

透過 type 這個指令的用途,我們可以知道每個指令是否為 bash 的內建指令。 此外,由于利用 type 搜尋后面的名稱時,如果后面接的名稱并不能以執(zhí)行檔的狀態(tài)被找到, 那么該名稱是不會被顯示出來的。舉例來說,您的 FC4 應該不會有 vbird 這個指令吧?! 輸入 type -p vbird 看一下,果然沒有輸出任何資料!而如果您輸入的是 type -p touch 呢? 則會出現(xiàn) /bin/touch,所以,這個 type 也可以用來作為類似 which 指令的用途。
####################################################
printf – 格式化輸出
printf是bash 2-3.x 的內建命令, 跟內建命令「echo」一樣,都是把訊息打印到終端上,不同之處是printf 具有更多的選項和格式化的工能,看命令的名字就是「print formatted」的意思。

printf 格式化的的選項如下
%a -- 十六進制浮點數(shù)字,用 lowercase letter 顯示
例: printf "%a\n" 16
在% 和 a 之間可用數(shù)字控制顯示格式,如
printf "%50a\n" 16

%A -- 如上,以 uppecase letter 顯示
%b -- 將 \ 的結果擴展
例: printf "%b\n" \\100
%c -- 顯示一個單一的子母
例: printf "%c\n" string
得到 s , 和%a 一樣,可在兩者之間用數(shù)字控制顯示格式,
%d -- 整數(shù)
例: printf "%d\n" 100000
它還支援數(shù)字用「,」由高位每三個數(shù)字以「,」分開,格式是
printf "%'d\n" 10000000
這個我在這里參加個一個討論,詳見
http://bbs.chinaunix.net/viewthr ... &例tra=page%3D6
%e -- 以科學記號法浮點數(shù)顯示
例: printf "%e\n" 10.00
%f -- 浮點數(shù)顯示
例: printf "%f\n" 10
此外它也支援像 %d 的 "%'d" 格式。
%g --  據(jù)手冊所說是樣 bash 根據(jù)數(shù)值在 %e 和 %f 之間選擇顯示形式,但我的測試卻像 seq -f 的'%g' 的數(shù)字顯示方式, 在 % 和 g 之間插入 「0數(shù)字」的方式就會在不足的整數(shù)前面加上一些「0」, 如 printf "%03g" 1 2 12 123 得到 001 002 012 123在 % 和 g 之間沒「0」的數(shù)字視為控制顯示格式。
%i -- 和 %d 一樣
%o -- 以八進制顯示數(shù)字,只能用整數(shù)
例: printf "%o\n" 8
%q -- 倨手冊原文為
Quote a string so it can be read properly by a shell script
大意為以 " " 保護字符使腳本正確讀入。
%s -- 和%q 相反,原文為
Display an unquoted string
我試出%s 和 %q 的結果為
[hto@localhost ~]$ printf "%q\n" str
str
[hto@localhost ~]$ printf "%q\n" str
str
[hto@localhost ~]$ printf "%s\n" str
str
[hto@localhost ~]$ printf "%s\n" ""str""
str
[hto@localhost ~]$ printf "%q\n" ""str""
str
[hto@localhost ~]$ printf "%q\n" '"str"'
\"str\"
[hto@localhost ~]$ printf "%q\n" "'str'"
\'str\'
[hto@localhost ~]$ printf "%q\n" "\'str\'"
\\\'str\\\'
[hto@localhost ~]$ printf "%s\n" "\'str\'"
\'str\'
%u -- 這個也是顯示整數(shù),跟 %d 差不多, 也支援 "%'" 的格式,但在測試下發(fā)現(xiàn)它和 %d 如以以下方式打印字符的話,不但不會報錯,還返回一些數(shù)字。
[hto@localhost ~]$ printf "%u\n" '"str"'
115
[hto@localhost ~]$ printf "%u\n" str
bash: printf: str: invalid number
0
[hto@localhost ~]$ printf "%u\n" 115
115
[hto@localhost ~]$ printf "%u\n" "str"
bash: printf: str: invalid number
0
[hto@localhost ~]$ printf "%u\n" '"str"'
115
[hto@localhost ~]$ printf "%'u\n" 1234
1,234
[hto@localhost ~]$ printf "%d\n" '"str"'
115
[hto@localhost ~]$ printf "%d\n" "'str'"
115
[hto@localhost ~]$ printf "%d\n" "'fuck'"
102
[hto@localhost ~]$ printf "%u\n" "'fuck'"
102
[hto@localhost ~]$

%x -- 以十六進制整數(shù) lowercase letter顯示數(shù)字     
例: printf "%x\n" 16
它也支援像 「%0數(shù)字g」的方式,整數(shù)不足指定的數(shù)位在前面加上 「0」
%X -- 同上,以 Uppercase letter 顯示數(shù)字
%% -- 就是顯示 %
printf 也可將八進制的數(shù)字顯示成十進制,方法是在八進制的數(shù)字前加上「\」和
「0」, 如 printf "%d\n" \0101
其它如 \b 就是倒格(backspace) , \f Form feed , \n 是新行 ,\r 回鍵 ,\t 是 tab
, \v vertical tab , \' 是 single quote character ,\\ 就是一個 「\」。

最后,太長的數(shù)字 printf 會報錯,
[hto@localhost ~]$ printf "%d\n" 123456789123456789012
bash: printf: warning: 123456789123456789012: 數(shù)值運算結果超出范圍
9223372036854775807

#################################################### 
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
shell命令
Linux 命令之 shopt
[BASH] 打造自己的 shell 環(huán)境 (2) - Shell Option
linux bash shell 最常用的函數(shù)和指令(備忘查詢)
Linux變量
Shell $?:獲取函數(shù)返回值或者上一個命令的退出狀態(tài)
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服