在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)三十九天----內(nèi)建命令
shell 學(xué)習(xí)四十一天----列出文件 ls 和 od 命令
shell 學(xué)習(xí)小結(jié)
shell 學(xué)習(xí)第二十八天----case 語句
shell 學(xué)習(xí)四十四天----尋找文件
shell 學(xué)習(xí)三十五天----波浪號展開與通配符
shell 學(xué)習(xí)三十八天----執(zhí)行順序和 eval
shell 學(xué)習(xí)四十八天----文件校驗(yàn)和匹配
shell 學(xué)習(xí)四十天----awk 的驚人表現(xiàn)
shell 學(xué)習(xí)第十一天----sed 正則的精確控制
shell 學(xué)習(xí)第十七天----awk 命令
shell 學(xué)習(xí)三十九天----內(nèi)建命令
shell 學(xué)習(xí)四十五天----xargs
shell 學(xué)習(xí)三十七天----引用
shell 學(xué)習(xí)第十六天----join 練習(xí)
shell 學(xué)習(xí)第二十四天----提取開頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第九天----分組
shell 學(xué)習(xí)第五天----基本的 I/O 重定向
shell 學(xué)習(xí)第十五天----使用 cut 選定字段
shell 學(xué)習(xí)四十六天----文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)第八天----擴(kuò)展正則表達(dá)式 (ERE)
shell 學(xué)習(xí)第十九天----文本塊排序
shell 學(xué)習(xí)第二十一天----重新格式化段落
shell 學(xué)習(xí)三十六天----命令替換
shell 學(xué)習(xí)第二十天----sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)四十二天----使用 touch 更新文件時(shí)間
shell 學(xué)習(xí)五十一天----top 命令查看進(jìn)程列表
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)五十四天----進(jìn)程系統(tǒng)調(diào)用的追蹤 strace
shell 學(xué)習(xí)五十天----查看進(jìn)程 ps 命令
shell 學(xué)習(xí)第二十七天----退出狀態(tài)和 if 語句
shell 學(xué)習(xí)第二十三天----打印
shell 學(xué)習(xí)三十三天----關(guān)于重定向
shell 學(xué)習(xí)四十九天----進(jìn)程建立
shell 學(xué)習(xí)第三十天----break,continue,shift,getopts
shell 學(xué)習(xí)五十五天----進(jìn)程記賬
shell 學(xué)習(xí)總結(jié)一
shell 學(xué)習(xí)第二十六天----變量與算數(shù)
shell 學(xué)習(xí)第二十二天----計(jì)算行數(shù), 字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)五十八天----/proc 文件系統(tǒng)
shell 學(xué)習(xí)第二十五天----神器的管道符
shell 學(xué)習(xí)第三十二天----read 讀取一行
sheel 學(xué)習(xí)第三天
shell 學(xué)習(xí)----小結(jié)
shell 學(xué)習(xí)第十八天----文本排序
shell 學(xué)習(xí)第三十一天----函數(shù)問題
shell 學(xué)習(xí)第十天----sed 查找與替換
shell 學(xué)習(xí)四十三天----臨時(shí)性文件的建立與使用
shell 學(xué)習(xí)四十七天----文件比較 cmp,diff,patch
shell 學(xué)習(xí)三十四天----printf 詳解
shell 學(xué)習(xí)五十七天 ----linux 任務(wù)管理,針對上一講的總結(jié)和擴(kuò)展
shell 學(xué)習(xí)第六天----小結(jié)
shell 學(xué)習(xí)第十三天----sed 案例分析
shell 學(xué)習(xí)第七天----基礎(chǔ)正則表達(dá)式 (BRE)
shell 學(xué)習(xí)第十二天----行與字符串
shell 學(xué)習(xí)小結(jié)四
shell 學(xué)習(xí)第二十九天----循環(huán)
shell 學(xué)習(xí)五十二天----刪除進(jìn)程 kill 命令
shell 學(xué)習(xí)五十六天----延遲進(jìn)程調(diào)度
shell 學(xué)習(xí)第四天----華麗的 printf 輸出
shell 學(xué)習(xí)第十五天----join 連接字段
shell 學(xué)習(xí)完結(jié)篇----希望你能看到
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)五十三天----捕獲信號 trap

shell 學(xué)習(xí)三十九天----內(nèi)建命令

內(nèi)建命令

shell 識別三種基本命令:內(nèi)建命令,shell 函數(shù)以及外部命令:

  1. 內(nèi)建命令就是有 shell 本身所執(zhí)行的命令。 有些命令是由于其必要性才內(nèi)建的,例如 cd 用來改變目錄,read 會(huì)將來自用戶 (和文件) 的輸入數(shù)據(jù)傳給 shell 外殼。另一種內(nèi)奸命令的存在則是為了效率,其中最典型的就是 test 命令,編寫腳本時(shí)經(jīng)常會(huì)用到它。另外還有 I/O 命令,例如 echoprintf。
  2. shell 函數(shù)是功能健全的一系列程序代碼,以 shell 語言寫成,他們可以像命令那樣引用。
  3. 外部命令就是由 shell 副本 (新的進(jìn)程) 所執(zhí)行的命令,基本的過程如下:

    • 3.1. 建立一個(gè)新的進(jìn)程。此進(jìn)程即為 shell 的一個(gè)副本
    • 3.2. 在新的進(jìn)程里,在 PATH 變量內(nèi)所列出的目錄中,需找特 定命令。 /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/u sr/sbin:/usr/bin:/root/binPATH 變量典型的默認(rèn)值 當(dāng)命令名稱含有斜杠 (/) 字符時(shí),將略過路徑查找步驟。
    • 3.3. 在新的進(jìn)程里,以所找到的新程序取代執(zhí)行中的 shell 程序并執(zhí)行
    • 3.4. 程序完成后,最初的 shell 會(huì)接著從終端讀取下一條命令,和執(zhí)行腳本里的嚇一跳命令。

使用 type 可以查看是否是內(nèi)建命令

type(不帶參數(shù)) 會(huì)顯示命令是內(nèi)建的還是外部的。

  • -tfile 外部命令;alias 命令別名;builtin 內(nèi)置命令
  • -a :會(huì)將命令 PATH 路徑顯示出來。

如何執(zhí)行交互式命令:

用戶在輸入命令后,一般情況下 shell 會(huì)解釋并執(zhí)行該命令,但是 shell 的內(nèi)建命令例外,執(zhí)行內(nèi)建命令相當(dāng)于調(diào)用 shell 進(jìn)程的一個(gè)函數(shù),并不創(chuàng)建新的進(jìn)程。

比如:cd,aliasumask,exit 等命令及時(shí)內(nèi)建命令,凡是用 which 命令查不到程序文件所在位置的命令都是內(nèi)建命令,內(nèi)建命令沒有單純的 man 手冊,要在 man 手冊中查看內(nèi)奸命令,應(yīng)該 man bash-builtins,內(nèi)建命令雖然不創(chuàng)建新的進(jìn)程,但也會(huì)有 Exit Static,通常也用 0 表示成功非零表示失敗,雖然內(nèi)建命令不創(chuàng)建新的進(jìn)程,膽汁性結(jié)束后也有一個(gè)狀態(tài)嗎,也可以用特殊變量 $? 讀出。

command 命令

語法:

command [-p] program [arguments....]

用途:

在查找要執(zhí)行的命令時(shí),為了避開 shell 的包含函數(shù)。這允許從函數(shù)中訪問與內(nèi)建命令同名的內(nèi)建版本。

主要選項(xiàng):

  • -p :當(dāng)查找命令是,使用 $PATH 的默認(rèn)值,保證找到系統(tǒng)的工具

行為:

command 會(huì)通過查閱特殊的與一般的內(nèi)建命令,已找出指定的 program,并沿著 $PATH 查找。使用 -p 選項(xiàng),則會(huì)使用 $PATH 的默認(rèn)值,而非當(dāng)前的設(shè)置。

如果 program 為特殊內(nèi)建命令,責(zé)任和的語法錯(cuò)誤都不會(huì)退出 shell,且任何前置的變量指定在命令完成后,即不再有效。

案例:

命令:echo linux
輸出:linux
命令:command echo linux
輸出:linux

command 命令調(diào)用指定的指令并執(zhí)行,命令執(zhí)行時(shí)不查詢 shell 函數(shù)。command 命令只能夠執(zhí)行 shell 內(nèi)部的命令

POSIX 標(biāo)準(zhǔn)為特殊內(nèi)建命令提供了兩個(gè)附加特性:

  1. 特殊內(nèi)建工具語法上的錯(cuò)誤,會(huì)導(dǎo)致 shell 執(zhí)行該工具時(shí)退出,然而當(dāng)語法錯(cuò)誤出現(xiàn)在一般內(nèi)建命令時(shí),并不會(huì)導(dǎo)致 shell 執(zhí)行該工具時(shí)退出。如果特殊內(nèi)建工具遇到語法錯(cuò)誤時(shí)不退出 shell,則它的退出值應(yīng)該非零。
  2. 以特殊內(nèi)建命令所標(biāo)明的變量指定,在內(nèi)建命令完成

第二項(xiàng)需要解釋一下,我們可以在命令前制定一個(gè)變量賦值,且變量值在被執(zhí)行命令的環(huán)境中不影響當(dāng)前 shell 內(nèi)的變量或是接下來的命令:

PATH=/bin:/usr/bin:/usr/ucb awk '...'

然而,當(dāng)這樣的指定用于特殊內(nèi)建命令時(shí),及時(shí)在特殊內(nèi)建命令之后,仍然會(huì)有影響。

wait 命令是用來等待后臺(tái)程序完成的。如果未加任何參數(shù),wait 會(huì)等待所有的后臺(tái)工作完成;否則,每個(gè)參數(shù)可以是后臺(tái)工作的進(jìn)程編號,或是工作控制的工作規(guī)格。

.(點(diǎn)號) 也是很重要的命令。它是用來讀取與執(zhí)行包含在個(gè)別文件中的命令。例如:當(dāng)你有很多歌 shell 函數(shù)想要在多個(gè)腳本中使用時(shí),正確方式是將他們放在各自的庫文件里,再以點(diǎn)號命令讀取他們:

. my_funcs #在函數(shù)中讀取 如指定的文件未含斜杠,則 shell 會(huì)查找 $PATH 下的目錄,以找到該文件。該文件無需是可執(zhí)行的,只要是可讀取的即可。

set 命令

set 命令最簡單的工作就是以排序的方式顯示所有的 shell 變量的名稱與值。這是調(diào)用它時(shí)不加任何參數(shù)與選項(xiàng)的行為。其輸出是采用 shell 稍后可以重讀的形式 ---- 包含適當(dāng)?shù)囊枴_@個(gè)想法是出自 shell 腳本有可能需要存儲(chǔ)他的狀態(tài),在之后會(huì)通過.(點(diǎn)號) 命令恢復(fù)它。

set 的另一項(xiàng)任務(wù)是改變位置參數(shù) ($1$2 等)。使用 -- 的第一個(gè)參數(shù)來結(jié)束設(shè)置它自己的選項(xiàng),則所有接下來的參數(shù)都會(huì)取代位置參數(shù),及時(shí)他們是以正號或負(fù)號開頭。

set 的功能描述:

設(shè)置 shell

語法:

set [+-abCdefhHklmnpPtuvx]

補(bǔ)充說明:

set 命令可以設(shè)置各種 shell 選項(xiàng)或者列出 shell 變量。單個(gè)選項(xiàng)設(shè)置常用的特性。在某些選項(xiàng)之后 -o 參數(shù)將特殊特性打開。在某些選項(xiàng)之后使用 +o 參數(shù)將關(guān)閉某些特性,不帶任何參數(shù)的 set 命令將顯示 shell 的全部變量。除非遇到非法的選項(xiàng),否則 set 總是返回 ture。

行為:

  1. 無選項(xiàng)或參數(shù),則以 shell 少后可讀取的形式來打印所有 shell 變量的名稱與值。
  2. 選項(xiàng)為 -- 及參數(shù),則以提供的參數(shù)取代位置參數(shù)
  3. 開頭為 - 的短選項(xiàng),或以 -o 開頭的長選項(xiàng),則可打開特定的 shell 選項(xiàng),額外的非選項(xiàng)參數(shù)可設(shè)置位置參數(shù)。
  4. + 開頭的短選項(xiàng),或以 +o 開頭的長選項(xiàng),則可關(guān)閉特定的 shell 選項(xiàng)。
  5. 單一的 -o 可以一種不特別指定的格式打印 shell 選項(xiàng)的當(dāng)前設(shè)置。
  6. 單一的 +o 則是顯示 shell 選項(xiàng)的當(dāng)前設(shè)置,其采用 shell 之后可以重讀的方式,以獲得選項(xiàng)的相同設(shè)置。

最后,set 被用來打開或停用 shell 選項(xiàng),指的是改變 shell 行為模式的內(nèi)部設(shè)置。

o 形式 短選項(xiàng) 說明
allexport                -a                        從設(shè)置開始標(biāo)記所有新的和修改過的用于輸出的變量         
braceexpand         -B                      允許符號擴(kuò)展,默認(rèn)選項(xiàng)  
emacs                                            在進(jìn)行命令編輯的時(shí)候,使用內(nèi)建的 emacs 編輯器,默認(rèn)選項(xiàng)
errexit                   -e                        如果一個(gè)命令返回一個(gè)非 0 退出狀態(tài)值 (失敗),就退出.
histexpand           -H                      在做臨時(shí)替換的時(shí)候允許使用! 和!! 默認(rèn)選項(xiàng)
history                                           允許命令行歷史,默認(rèn)選項(xiàng)
ignoreeof                                     禁止 coontrol-D 的方式退出 shell,必須輸入 exit。
interactive-comments                  在交互式模式下,#用來表示注解
keyword             -k                     為命令把關(guān)鍵字參數(shù)放在環(huán)境中
monitor               -m                      允許作業(yè)控制
noclobber           -C                      保護(hù)文件在使用重新動(dòng)向的時(shí)候不被覆蓋
noexec                 -n                       在腳本狀態(tài)下讀取命令但是不執(zhí)行,主要為了檢查語法結(jié)構(gòu)。
noglob                -d                       禁止路徑名擴(kuò)展,即關(guān)閉通配符     
notify                 -b                        在后臺(tái)作業(yè)以后通知客戶
nounset              -u                         在擴(kuò)展一個(gè)沒有的設(shè)置的變量的時(shí)候,顯示錯(cuò)誤的信息     
onecmd               -t                          在讀取并執(zhí)行一個(gè)新的命令后退出       
physical              -P                       如果被設(shè)置,則在使用 pwd 和 cd 命令時(shí)不使用符號連接的路徑 而是物理路徑
posix                                             改變 shell 行為以便符合 POSIX 要求
privileged                                       一旦被設(shè)置,shell 不再讀取.profile 文件和 env 文件 shell 函數(shù)也不繼承任何環(huán)境
verbose             -v                            為調(diào)試打開 verbose 模式
vi                                                  在命令行編輯的時(shí)候使用內(nèi)置的 vi 編輯器
xtrace                  -x                            打開調(diào)試回響模式

擴(kuò)展:

setenvexport 這三個(gè)命令都可以用來顯示 shell 變量,區(qū)別是:

  • set 用來顯示本地變量
  • env 用來顯示環(huán)境變量
  • export 用來顯示和設(shè)置環(huán)境變量
  • set 顯示當(dāng)前 shell 的變量,包括當(dāng)前用戶的變量
  • env 顯示當(dāng)前用戶的變量
  • export 顯示當(dāng)前到處成用戶變量的 shell 變量

每個(gè) shell 有自己特有的變量 (set) 顯式的變量,這個(gè)和用戶變量不同,當(dāng)前用戶變量和你用什么 shell 無關(guān),不管你用什么 shell 都在,比如 HOME,SHELL 這些變量,但 shell 自己的變量在不同的 shell 是不同的,比如 BASH_ARGC,BASH 等,這些變量只有 set 才會(huì)顯示,是 bash 特有的,export 不加參數(shù)的時(shí)候,顯示哪些變量被到處成了用戶變量,因?yàn)橐粋€(gè) shell 自己 Ian 量可以通過 export 導(dǎo)出變成一個(gè)用戶變量。

[root@linux ~]# aaa=bbb
[root@linux ~]# echo $aaa
bbb
[root@linux ~]# set|grep aaa
aaa=bbb
[root@linux ~]# env|grep aaa
[root@linux ~]# export aaa
[root@linux ~]# env|grep aaa
aaa=bbb

setenv,export----linux 中的環(huán)境變量命令

linux 是一個(gè)多用戶的操作系統(tǒng)。每個(gè)用戶登錄系統(tǒng)之后,都會(huì)有一個(gè)專用的運(yùn)行環(huán)境。通常每個(gè)用戶默認(rèn)的環(huán)境都是相同的,這個(gè)默認(rèn)環(huán)境實(shí)際上就是一組環(huán)境變量的定義。用戶可以對自己的運(yùn)行環(huán)境進(jìn)行定制,其方法就是修改相應(yīng)的系統(tǒng)環(huán)境變量。

什么是環(huán)境變量

環(huán)境變量是一個(gè)具有特定名字的對象,它包含了一個(gè)或多個(gè)應(yīng)用程序所使用到的信息。通過使用環(huán)境變量,可以很容易的修改一個(gè)牽扯到一個(gè)或多個(gè)應(yīng)用程序的配置信息。

常見的環(huán)境變量

對于 PATH 和 HOME 等環(huán)境變量大家都不陌生。 PATH 能夠指定命令的搜索路徑,那么動(dòng)態(tài)鏈接庫的路徑用什么指定呢? 或者就是在 PATH 里面? 比如有一個(gè)程序需要 /usr/local/lib 下面的一個(gè)庫文件,應(yīng)該怎么指定其路徑呢? 經(jīng)??吹降哪承┳兞浚?code>LD_LIBRARY_PATH,LIBPATH,CLASSPATH 等,他們之間有什么不同的關(guān)系?

  1. HISTSIZE 是指保存歷史命令記錄的條數(shù)
  2. LOGNAME 是指當(dāng)前用戶的登錄名
  3. HOSTNAME 是指主機(jī)的名稱,許多程序如果要用到主機(jī)名的話,通常是從這個(gè)環(huán)境變量中來取得的
  4. SHELL 是指當(dāng)前用戶的用的是哪一種 shell
  5. LANG/LANGUGE 是和怨言相關(guān)的環(huán)境變量,使用多種語言的用戶可以修改此環(huán)境變量
  6. MAIL 是指當(dāng)前用戶的郵件存放目錄。
  7. PS1 是基本提示符,對于 root 用戶是#,度與普通用戶是 $.PS2 是附屬提示符,默認(rèn)是 “>”。可以通過修改此環(huán)境變量來修改當(dāng)前的命令符。