国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

linux bash環(huán)境變量簡單總結(jié)

2024-06-28 16:03:26
字體:
供稿:網(wǎng)友

一.環(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)境變量的定義。 環(huán)境變量是全局的,設(shè)置好的環(huán)境變量可以被所有當(dāng)前用戶所運(yùn)行的程序所使用。 用戶可以對自己的運(yùn)行環(huán)境進(jìn)行定制,其方法就是修改相應(yīng)的系統(tǒng)環(huán)境變量。 常見的環(huán)境變量:PATH:             決定了shell將到哪些目錄中尋找命令或程序ROOTPATH:     這個(gè)變量的功能和PATH相同,但它只羅列出超級(jí)用戶(root)鍵入命令時(shí)所需檢查的目錄。HOME:            當(dāng)前用戶主目錄USER:               查看當(dāng)前的用戶LOGNAME:    查看當(dāng)前用戶的登錄名。UID:                當(dāng)前用戶的識(shí)別字,取值是由數(shù)位構(gòu)成的字串。SHELL:           是指當(dāng)前用戶用的是哪種Shell。TERM :           終端的類型。PWD                 當(dāng)前工作目錄的絕對路徑名,該變量的取值隨cd命令的使用而變化。MAIL:             是指當(dāng)前用戶的郵件存放目錄。HISTSIZE:     是指保存歷史命令記錄的條數(shù)HOSTNAME: 是指主機(jī)的名稱,許多應(yīng)用程序如果要用到主機(jī)名的話,通常是從這個(gè)環(huán)境變量中來取得的。PS1:              是基本提示符,對于root用戶是#,對于普通用戶是$,也可以使用一些更復(fù)雜的值。PS2:              是附屬提示符,默認(rèn)是“>”。可以通過修改此環(huán)境變量來修改當(dāng)前的命令符,比如下列命令會(huì)將提示符                          修改成字符串“Hello,My NewPRompt :) ”。# PS1=" Hello,My NewPrompt :) "IFS:               輸入域分隔符。當(dāng)shell讀取輸入時(shí),用來分隔單詞的一組字符,它們通常是空格、制表符和換行符。

 

語言及環(huán)境字符集相關(guān)的重要環(huán)境變量:     相關(guān)命令:          stty 顯示或設(shè)定文字終端設(shè)置,主要是按鍵的代表意義          locale (local environment)查看當(dāng)前的語系信息         【注:locale -a :查看當(dāng)前系統(tǒng)所支持的字符集】     LANG   沒有設(shè)置任何LC_XXX變量時(shí)所使用的默認(rèn)值。        【LANG=zh.CN.UTF-8   gedit  a.txt  //臨時(shí)采用其它字符集語言打開指定的應(yīng)用程序】     LC_ALL   用來覆蓋掉所有其他LC_XXX變量的值     LC_COLLATE  使用所指定地區(qū)的排序規(guī)則     LC_CTYPE  使用指定地區(qū)的字符集(即:字母,數(shù)字,標(biāo)點(diǎn)符號(hào)等)     LC_MESSAGES  使用所指定地區(qū)的響應(yīng)與信息;【注:僅POSIX適用】     LC_MONETARY  使用指定地區(qū)的貨幣格式     LC_NUMERIC  使用指定地區(qū)的數(shù)字格式     LC_TIME   使用指定地區(qū)的日期與時(shí)間格式。

 

不太常用的實(shí)用環(huán)境變量:  LD_LIBRARY_PATH  這個(gè)變量包含了一系列用冒號(hào)隔開的目錄,動(dòng)態(tài)鏈接器將在這些目錄里查找?guī)煳募! ANPATH                  這個(gè)變量包含了一系列用冒號(hào)隔開的目錄,命令man會(huì)在這些目錄里搜索man頁面。                                             【注:man幫助目錄結(jié)構(gòu)必須為:man/{man1,man2,..man8}, MANPATH=/man】  INFODIR                    這個(gè)變量包含了一系列用冒號(hào)隔開的目錄,命令info將在這些目錄里搜索info頁面。  PAGER                      這個(gè)變量包含了瀏覽文件內(nèi)容的程序的路徑(例如less或者more)。  EDITOR                     這個(gè)變量包含了修改文件內(nèi)容的程序(文件編輯器)的路徑(比如nano或者vi)。

 

系統(tǒng)位置變量—【僅用于shell腳本中獲取命令行傳遞給腳本的參數(shù)】     $0、$1 $2 $3 $4 $5 $6 $7 $8 $9,$*   ——>$0到9與windows中0~9的含義一樣。     $0:當(dāng)前執(zhí)行Shell文件名     $#:命令行中位置參數(shù)的個(gè)數(shù)       $*:獲取當(dāng)前shell的所有參數(shù)     $@:此程序的所有參數(shù)

 

系統(tǒng)特殊變量      $?:上一條命令執(zhí)行后返回的狀態(tài),當(dāng)返回值為0:表執(zhí)行正常,非0:執(zhí)行異常或出錯(cuò)            程序執(zhí)行,可能有兩類返回值:                 》0:正確執(zhí)行                 》1~255:錯(cuò)誤執(zhí)行。其中1,2,127 是系統(tǒng)預(yù)留錯(cuò)誤代碼,可自行使用        $$:當(dāng)前所在進(jìn)程的進(jìn)程號(hào) 【$$變量最常見的用途是用做暫存文件的名字以保證暫存文件不會(huì)重復(fù)。】      $!:后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程號(hào)              $_:在此之前執(zhí)行命令或腳本的最后一個(gè)參數(shù)    引號(hào)對變量賦值的影響:     》雙引號(hào)“”:允許通過$符號(hào)引用其他變量值       》單引號(hào)‘’: 禁止引用其他變量值,$視為普通字符        》反撇號(hào)` `:將命令執(zhí)行的結(jié)果變輸出給變量 ,                        $(…) :這是反撇號(hào)的另一種版本。        二.Bash(Bourne-Again Shell)簡介     Bash是許多Linux平臺(tái)的內(nèi)定Shell,事實(shí)上,還有許多傳統(tǒng)UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh  等等。Shell Script大致都類同,當(dāng)您學(xué)會(huì)一種Shell以后,其它的Shell會(huì)很快就上手。  大多數(shù)的時(shí)候,一個(gè)Shell Script通常可以在很多種Shell上使用。  通常而言,shell的功能是從終端或其它輸入取得命令行,將其解析為一系列操作指令,調(diào)用系統(tǒng)內(nèi)核或相應(yīng)的  外部程序執(zhí)行,然后將執(zhí)行結(jié)果返回給終端或其它輸出。因此,實(shí)現(xiàn)一個(gè)簡單的shell是一項(xiàng)容易的工作。  但bash的功能不僅限于此,它支持用管道和重定向協(xié)同執(zhí)行命令,提供了強(qiáng)大的腳本編程能力,  具備作業(yè)管理功能。一般的Linux發(fā)行版中,bash的可執(zhí)行文件往往是/bin中最大的幾個(gè)實(shí)用程序之一,  客觀反映了它的復(fù)雜性。  三.Bash實(shí)現(xiàn)原理簡介     bash使用GNU Readline庫處理用戶命令輸入,Readline提供類似于vi或emacs的行編輯功能。     bash運(yùn)行時(shí)的調(diào)度中心是其主控循環(huán)。主控循環(huán)的功能較為簡單,它循環(huán)讀取用戶(或腳本)輸入,傳遞給  語法分析器,同時(shí)處理下層遞歸返回的錯(cuò)誤。     語法分析器對文本形式的輸入首先進(jìn)行通配符、別名、算術(shù)和變量展開等工作,然后通過命令生成器得到  規(guī)范的命令結(jié)構(gòu),并由專門的重定向處理機(jī)制填寫重定向語義,交由命令執(zhí)行器執(zhí)行。命令執(zhí)行器依據(jù)  命令種類不同,執(zhí)行內(nèi)部命令函數(shù)、外部程序或文件系統(tǒng)調(diào)用。在命令執(zhí)行過程中,執(zhí)行器要對系統(tǒng)信號(hào)  進(jìn)行捕獲和處理。在支持作業(yè)管理的操作系統(tǒng)中,命令執(zhí)行器將進(jìn)程信息加入作業(yè)控制機(jī)制,并允許用戶  使用內(nèi)部命令或鍵盤信號(hào)來啟停作業(yè)。如果在不支持作業(yè)管理的操作系統(tǒng)中編譯bash,會(huì)使用另一套接口  相同的機(jī)制對進(jìn)程信息進(jìn)行簡單的維護(hù)。

四.Shell和環(huán)境變量的關(guān)系      環(huán)境變量是和Shell緊密相關(guān)的,環(huán)境變量是通過Shell命令來設(shè)置的。用戶登錄系統(tǒng)后就啟動(dòng)了一個(gè)Shell。  對于Linux來說一般是bash,但也可以重新設(shè)定或切換到其它的 Shell。      設(shè)置好的環(huán)境變量又可以被所有當(dāng)前用戶所運(yùn)行的程序所使用。對于bash這個(gè)Shell程序來說,可以通過

  變量名來訪問相應(yīng)的環(huán)境變量。     Linux 的環(huán)境變量具有繼承性,即子shell 會(huì)繼承父shell 的環(huán)境變量。     當(dāng)前shell中的變量也叫本地變量,很顯然本地變量中肯定包含環(huán)境變量。Linux 的本地變量的非環(huán)境變量  不具備繼承性。

五、登錄腳本的執(zhí)行順序:【注:僅適用于 bash shell】  Login Shell       是指登錄時(shí),需要提供用戶名密碼的shell,如:su – user1 , 圖形登錄, ctrl+alt+F2-6進(jìn)入的登錄界面。     這種Login shell  執(zhí)行腳本的順序:       1. /etc/profile       【全局profile文件;它定義了LoginUser的 PATH, USER, LOGNAME(登錄使用者帳號(hào))】       2. /etc/profile.d/目錄下的腳本       3. ~/.bash_profile   【搜索命令的路徑    ——————- 登錄級(jí)別 環(huán)境變量配置文件 】       4. ~/.bashrc      【存儲(chǔ)用戶設(shè)定的別名和函數(shù) ———- shell級(jí)別 環(huán)境變量配置文件】       5. /etc/bashrc     【全局bashrc文件; 它主要定義一些 Function 和 Alias;更改/etc/bashrc會(huì)影響到所有用戶,由root用戶管理。】  Non-Login shell       非登錄shell指的是,不需要輸入用戶名密碼的shell,如圖形下 右鍵terminal,或ctrl+shift+T打開的shell     這種Non-Login shell 執(zhí)行登錄腳本的順序:        1. ~/.bashrc       2. /etc/bashrc       3. /etc/profile.d/目錄下的腳本

  

   說到用戶腳本就不能不說下,與用戶密切相關(guān)的兩個(gè)文件:  1. /etc/login.defs   —– 它定義了用戶密碼長度,最長使用期,警告天數(shù),密碼加密方法,家目錄默認(rèn)權(quán)限 等。   2. /etc/default/useradd  –它定義了創(chuàng)建用戶時(shí),默認(rèn)家目錄的根,默認(rèn)shell,從哪里拷貝必要配置文件,是否創(chuàng)建郵箱等。       /etc/skel –【.bashrc, .bash_profile, .bash_logout等文件都源自這里】            當(dāng)用命令添加一個(gè)用戶時(shí),它默認(rèn)會(huì)在/home/下新建一個(gè)以用戶名為名的目錄,并把/etc/skel下的文件           copy到這個(gè)新用戶的家目錄中。這樣當(dāng)該用戶登錄時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用這些文件,配置該用戶的登錄環(huán)境。

 

六. 環(huán)境變量的應(yīng)用 和 操作:     1.變量內(nèi)容的刪除和替換          ${變量#關(guān)鍵詞} 從頭開始檢查關(guān)鍵詞,將符合的最短數(shù)據(jù)刪除          ${變量##關(guān)鍵詞} 從頭開始檢查關(guān)鍵詞,將符合的最長數(shù)據(jù)刪除          ${變量%關(guān)鍵詞} 從尾開始檢查關(guān)鍵詞,將符合的最短數(shù)據(jù)刪除          ${變量%%關(guān)鍵詞} 從尾開始檢查關(guān)鍵詞,將符合的最長數(shù)據(jù)刪除          ${變量/舊字符串/新字符串} 若符合舊字符串,則第一個(gè)舊字符串被替換          ${變量//舊字符串/新字符串} 若符合舊字符串,則全部舊字符串被替換

     2. 變量內(nèi)容的設(shè)定和替換          一次變量置換:             變量沒有值:                  echo ${a:=abc}   //若a沒有值,就送給a一個(gè)abc,作為它的值,這時(shí)a的值就永久是abc了,直到下次修改。                 //下面例子不常用                  echo ${a:?必須需要給變量一個(gè)值}   //若a沒有值,則提示"必須需要給變量一個(gè)值"                  echo ${a:-abc}   //若a沒有值,就借給a一個(gè)值,次命令執(zhí)行完后,a還是空值。             變量有值                  echo  ${a:+123}  //臨時(shí)替換變量的值; a=1; expr ${a:+123} – 1;其值為122

        二次變量置換             示例一:                  A=B                  a=1                  B1="B值"                  eval echo /$$A$a > B1.txt   //注意:這里不能直接用反撇號(hào)獲取二次置換的結(jié)果。                  C=`cat B1.txt`      //如此就可以獲取B1的變量值了.

           示例二:                  FAIL="echo -e /"/n/e[31m/${FMSG}/e[0m/n/""                  FMSG="需要紅色提示顯示的字符串。"  &&  eval ${FAIL}

          示例三:                  grep的結(jié)果:"APPDIR="/home/abc/bin“"  通過eval可以直接將APPDIR轉(zhuǎn)換為賦值語句執(zhí)行。                  eval `grep '^ .*APPDIR'  /etc/tuxconfig`                    echo ${APPDIR}      //這樣就可以輸出APPDIR的值。

 七.一些Shell內(nèi)置命令     1.source命令          作用:在當(dāng)前bash環(huán)境下讀取并執(zhí)行FileName中的命令,使環(huán)境變量生效。          注:該命令通常用命令“.”來替代。          例如:               source ~/.bash_profile     2.export :         用于把變量變成當(dāng)前shell和其子shell的環(huán)境變量,存活期是當(dāng)前的shell及其子shell,因此重新登陸或者關(guān)閉當(dāng)前        shell及其子shell后,它所設(shè)定的環(huán)境變量就消失了。    3.env和printenv          這兩個(gè)變量用于打印所有的環(huán)境 變量:    4.set          用于顯示與設(shè)置當(dāng)前本地 變量。單獨(dú)一個(gè)set 就顯示了當(dāng)前環(huán)境的所有的變量,它肯定包括環(huán)境變量和一些非環(huán)境變量   5.unset          用于清除變量。不管這個(gè)變量是環(huán)境變量還是本地變量,它都可以清除。

八.其它與變量相關(guān)的小知識(shí)    shell : 屬于弱類型語言,變量可直接使用,不需要聲明和初始化。            對于強(qiáng)類型語言,則必須在使用變量前先聲明,甚至需要初始化,因?yàn)樽兞坎怀跏蓟?#20540;為隨機(jī)數(shù)。     變量: 它是內(nèi)存空間的一個(gè)別名,這個(gè)別名映射的是內(nèi)存的存儲(chǔ)單元的編址。     數(shù)組:是一個(gè)命名的連續(xù)的內(nèi)存空間     Shell的變量類型: 是事先確定數(shù)據(jù)的存儲(chǔ)格式和長度。               字符:  是按照ASCII存儲(chǔ);一個(gè)字符串10,是存儲(chǔ)為兩個(gè)ASCII碼,占16bit。               數(shù)值:                        1.整型:    如10,它存儲(chǔ)時(shí),是轉(zhuǎn)為二進(jìn)制1010,占4bit,實(shí)際占8bit.                    2.浮點(diǎn)型: “11.23”,它在存儲(chǔ)時(shí),是會(huì)轉(zhuǎn)為兩部分存放,                             一般為數(shù)值和小數(shù)點(diǎn)位置,如11.23–>0.1123*10^2,存儲(chǔ)時(shí)僅存1123和次方數(shù)2.                            如:2014/11/11在存放時(shí),它是若按字符串存64bit.                               如按數(shù)值存則采用2014/11/11 – 1977/1/1 = N, 它若存N這個(gè)數(shù)值,需要的空間最多24bit.      變量溢出:      一個(gè)整型是8bit,可存放的值有256個(gè),范圍是0-255,但若一個(gè)整型中存放了256,最怎樣?結(jié)果就是變量溢出,     8bit中存的是全0,1溢出了,溢出之后1被存放到其它程序的存儲(chǔ)空間中了,它可能覆蓋其它程序的數(shù)據(jù)。     這看上去沒有任何意義,但若是一個(gè)設(shè)計(jì)精良的溢出值,則可能會(huì)因此覆蓋掉某些程序的一部分內(nèi)存空間     從而輕易的獲取該程序的控制權(quán),若該程序是系統(tǒng)進(jìn)程,則它將可能獲取系統(tǒng)權(quán)限

 

  shell中數(shù)組相關(guān)操作: —【注:shell中的數(shù)組不能做為export導(dǎo)出的對象,因此它僅不能作為環(huán)境變量】        變量名=(Value1  Value2  Value3  Value4)        a=(1  2  3  4  5)                例子:                    Cpu(s):  1.0%us,  0.5%sy,  0.0%ni, 98.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st                    a=(`top -n5 -d1 | awk '$1~/Cpu/(s/):/{print $2}' | awk -F'%' '{print $1}' | xargs -n5`)                        查數(shù)組成員數(shù)                echo  ${#a[*]}  —>前面加“#”,表示查看數(shù)組有多少個(gè)成員        查看成員值                echo ${a[0]}  —>第一個(gè)數(shù)組成員的值為  1.                echo ${a[*]}  或  echo ${a[@]}   —>查看所以成員的值                declare  -p  a  —>查看所有數(shù)組成員。

                echo  ${a[*]:1:3}  —>查看數(shù)組中下標(biāo)為1~3的成員值

原文地址:http://www.178linux.com/8005


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阜城县| 德州市| 上杭县| 张家界市| 清徐县| 耒阳市| 利辛县| 镇原县| 报价| 广河县| 钟山县| 崇礼县| 军事| 三台县| 赣州市| 竹山县| 本溪| 建始县| 安庆市| 卢氏县| 永靖县| 鄂温| 宁城县| 东源县| 日照市| 公安县| 云霄县| 蛟河市| 广灵县| 吉首市| 修武县| 蕲春县| 长治县| 昭通市| 云霄县| 开封市| 绵竹市| 上虞市| 伊川县| 磐石市| 柏乡县|