初學Linux之shell腳本編程

shell程序的特點;shell腳本的結構和格式要求;變量;算術運算和邏輯運算;條件測試;防止擴展和shell登錄的相關配置文件

一、shell程序的特點

shell 程序是一門高級語言,它是解釋執行編輯的指令的,程序在執行過程中先對每一行命令進行解釋,解釋成計算機能夠識別的機器代碼后,由計算機按照順序執行。

由于是一行一行的解釋執行,所以順序執行是主要的特點。同時shell程序還支持分支判斷和選擇循環,這也就能夠處理重復性以及較為復雜性的工作。

二、shell 腳本的結構和格式要求

? ? ? ? shell 編輯語言的基本機構包括:各種系統命令的組合、數據存儲(變量、數組)、表達式的使用、判斷和循環語句。shell 編程最簡單的實現就是shell語言編寫的腳本程序。

腳本的格式要求:首行shebang機制。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? #!/bin/bash ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? #!/usr/bin/python ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? #!/bin/awk

shebang機制聲明了腳本中語言的格式類型,限定了命令執行的環境。添加shebang機制是最基本的,之后就可以輸入一些簡單的指令了。當用到一些比較多的命令完成一個任務時,為了閱讀的方便,我們可以對一段命令語句的上一行或者語句后面添加注釋,注釋以#開頭的,# 后面的命令語句在腳本運行時計算機直接忽略,不進行解釋。注釋也可以用來在腳本的開頭添加一些有關腳本功能及編寫人員的信息,讓腳本具備共享性和連貫性,為腳本的后續優化提前準備。

腳本代碼開頭約定: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 1、第一行一般為調用使用的語言

2、程序名,避免更改文件名為無法找到正確的文件

3、版本號

4、更改后的時間

5、作者相關信息

6、該程序的作用,及注意事項

7、最后是各版本的更新簡要說明

shell腳本的運用會大大簡化運維工作的重復性的工作內容,具體的用途包括:自動化常用命令、執行系統管理和故障排除、創建簡單的應用程序、處理文本或文件。

腳本的基本結構

#!SHEBANG

CONFIGURATION_VARIABLES? (配置變量)

FUNCTION_DEFINITIONS (函數定義)

MAIN_CODE

示例:一個腳本查找出給定范圍數字范圍內,所有的素數。

捕獲? 捕獲

上面腳本的編寫用到了變量,函數,基本的格式也是符合要求的,右側是腳本的執行結果,功能基本以及實現,若是針對更加復雜的情形,還可以進行后續的優化,使腳本變得嚴謹。

當我們的腳本完成后,可能由于程序的不嚴謹,導致腳本的執行結果和預期有所出入,我們可以對編寫的腳本進行調試檢查。Linux中的bash命令就具備這也的功能:

bash -n ? /path/to/script_file ? ? ? 可以檢查腳本中的語法錯誤

bash? -x ?? /path/to/script_file ? ? ? 可以逐行執行腳本中的語句,并輸出執行結果,可以對腳本的執行進行調試。

三、變量

變量是一種“值”能夠改變的字符表示。當變量一旦使用,它本身代表了計算機的一小塊內存空間,這個內存空間,存儲變量代表的“值”??梢韵胂蟪梢粋€重復使用的快遞盒,里面可以裝不同的貨物,當要使用到盒子里面的貨物時,將盒子里面的貨物取出即可。

變量可以存儲的數據類型兩種:字符串和數值,數值中包括了整型(整數)和浮點型(小數)。變量的功能包括:1、靈活的存儲數據;2、參與運算,重復使用;3、表示一定的數據范圍。

在不同的計算機語言中,變量使用規范是不盡相同的。比如shell中,變量是沒有細分類型的,默認都是字符型,當一個變量存儲的是數字時,運算時會自動轉換數字類型進行運算,這中對變量使用沒有嚴格的規定的變量,我們稱為弱類型的變量。而python中,不同的變量會由字符型,整數型,浮點數型等等,變量的字符型和整數型的變量運算是不允許的,這中情況下的變量,我們稱為強類型的變量。

變量的類型沒有具體的要求的,但是變量名稱是由規范的,變量命名法則:

1、不能使程序中的保留字:例如if, for

2、只能使用數字、字母及下劃線,且不能以數字開頭

3、見名知義

4、統一命名規則:駝峰命名法

根據變量的生效范圍等標準劃分下面變量類型:

局部變量:生效范圍為當前shell進程;對當前shell之外的 其它shell進程,包括當前shell的子shell進程均無效

環境(全局)變量:生效范圍為當前shell進程及其子進程

本地變量:生效范圍為當前shell進程中某代碼片斷,通常指函數

位置變量:$1, $2, …來表示,用于讓腳本在腳本代碼 中調用通過命令行傳遞給它的參數

特殊變量:$?, $0, $*, $@, $#,$$

上面我們了解了變量的基本信息,但是變量和腳本有什么關系呢?這是由于,在計算機處理大量的數據時,我們不能將計算機需要的數據都一一輸入到計算機,一一輸入既浪費時間,也浪費計算機的內存空間和性能。本身計算機有運算的功能,我們可以輸入一個初始的數值,通過一定的運算方式,讓計算機自己生成可能用到的數據,但是數據也不能一直生成,卻不刪除,所以讓變量保存不需要一直存在的數值,這也就能解決上面的困惑了。而腳本也是一樣的情況。

?1、局部變量

變量賦值:name=‘value’

注意:變量賦值的等號兩邊不可以有一個空格

要賦得值中間不能有空格,有的話需要用雙引號引起

調用變量的值時,有必要使用雙引號引起,防止部分信息丟失

可以使用引用value:

(1) 可以是直接字串; name=“root”

(2) 變量引用:name=”$USER”

(3) 命令引用:name=`COMMAND` name=$(COMMAND) ?

變量引用:${name} $name

” ? “:弱引用,其中的變量引用會被替換為變量值

‘ ? ? ‘:強引用,其中的變量引用不會被替換為變量值,而保持原字符串

顯示已定義的所有變量:set ?

刪除變量:unset name

2、環境變量 ?

捕獲 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 捕獲

3、只讀和位置變量

只讀變量:只能聲明,但不能修改和刪除 ?

聲明只讀變量:

readonly name

declare -r name ?

查看只讀變量: readonly –p ?

位置變量:在腳本代碼中調用通過命令行傳遞給腳本的參數

$1, $2, …:對應第1、第2等參數,shift [n]換位置 ? ?位置變量數字是兩位以上的使用 ${10} ? ? ? ? ?

? ? ? ? ? ? ? ? ? ?? $0: 命令本身

$*: 傳遞給腳本的所有參數,全部參數合為一個字符串

$@: 傳遞給腳本的所有參數,每個參數為獨立字符串

$#: 傳遞給腳本的參數的個數

$@ $* 只在被雙引號包起來的時候才會有差異 ? ? ?位置變量”$*”,在腳本中,被腳本中的腳本引用時,如果有雙引號,會導致變為一個整體參數,而不是原來的多個參數

set — 清空所有位置變量

4、腳本的退出狀態—變量 $?

我們在命令行中輸入一個命令,這個命令運行后,不管是否成功,都會有一個退出狀態值,一般是無法查看到的,可以查看環境變量? $? 的值,若返回的值是 0,代表成功,若是1-255,代表失敗。

在腳本中也是如此,如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼 取決于腳本中執行的最后一條命令的狀態碼 。我們也可以通過 exit? [n] 命令,自定義腳本運行的退出狀態碼, 注意:腳本中一旦遇到exit命令,腳本會立即終止;終止退出 狀態取決于exit命令后面的數字。

5、read命令介紹

read 命令可以讓用戶的鍵盤輸入,導入到指定的變量中,若是在腳本中,可以讓腳本外讓用戶實時輸入,從而實現腳本與用戶交互。若是沒有提供變量名,會提供給 $REPLY

常用的選項

-p???? 指定要輸出的提示

-s???? 讓輸入的文字不可見(設置密碼)

-n???? 指定輸入的字符長度

-d???? 指定結束符

-t N 指定輸入等待的時間

四、算數運算和邏輯運算

1、算數運算

bash中支持的算術運算包括:+, -, *, /, %取模(取余), **(乘方)等等 ,我們可以使用help let 命令查看大部分的運算符號。

實現算數運算的方法:

(1) let var=算術表達式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ?? (2) var=$[算術表達式] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ?? (3) var=$((算術表達式)) ? 算數表達式中若是變量名,可以不加 “$”表示 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ?? (4) var=$(expr arg1 arg2 arg3 …) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ?? (5) declare –i var = 數值 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ?? (6) echo ‘算術表達式’ | bc

乘法運算符號 “ * ”? 在一些場景下(正則表達、通配符)有特殊的含義,必要時需要轉義使用。

bash中有一個隨機數生成器 :$RANDOM 每次顯示它的值,是自動隨機生成的,范圍是(0-32767),我們可以利用這個變量的隨機性,通過取余數的運算,生成我們需要的隨機數范圍。

例如:echo ? $[RANDOM%20] ? ? ?? 每次產生的隨機數在 0-19 范圍內,這是因為,對20取余數是不會大于等于20的。

運算的同時賦值的方法:

1、增強型賦值: +=, -=, *=, /=, %=

let? i+=3? ; let? i-=3 ? …… ?? 相當于 ? i=$[i+3]? ; i=$[i-3]

2、遞增和遞減:++i , –i ,? i++ , i– ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ?? let? ++i ; ? let? i++ ?相當于? let i+=1

?2、邏輯運算

邏輯運算的運算結果和算術運算不同,算數運算是得到一個數值,邏輯運算的結果不是數值,而是運算成功與否,結果只有兩種:true(真)–0,false(假)–1? 這里是對應bash的輸出值。

邏輯運算一般是:與(-a)、或(-o)、非(!),衍生的還有短路運算:短路與(&&)、短路或(||)、異或(^)。運算規則如下(1–真、0–假,和shell是不同的):

捕獲

五、條件測試

條件性測試,判斷某條件是否滿足,需要由測試機制來實現 , 專用的測試表達式需要由測試命令輔助完成測試過程 。

1、測試命令:

? test EXPRESSION ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? [ EXPRESSION ] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? [[ EXPRESSION ]] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ?? 注意:EXPRESSION前后必須有空白字符

命令、測試命令和短路與、短路或結合,可以根據命令的退出狀態碼進行條件判斷控制命令的執行。

EXPRESSION? 包含如下:

2、數值測試 ?? -gt 是否大于

-ge 是否大于等于 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? -eq 是否等于 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? -ne 是否不等于 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? -lt 是否小于 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? -le 是否小于等于

3、字符串測試:

== 是否等于

> ascii碼是否大于ascii碼 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?? < 是否小于

!= 是否不等于

=~ 左側字符串是否能夠被右側的PATTERN所匹配

注意: 此表達式一般用于[[ ]]中;擴展的正則表達式

-z “STRING“ 字符串是否為空,空為真,不空為假

-n “STRING“ 字符串是否不空,不空為真,空為假 ?

注意:用于字符串比較時的用到的操作數都應該使用引號 ?

4、文件存在性測試

-a FILE:同-e

-e FILE: 文件存在性測試,存在為真,否則為假 ?存在性及類別測試

-b FILE:是否存在且為塊設備文件

-c FILE:是否存在且為字符設備文件

-d FILE:是否存在且為目錄文件

-f FILE:是否存在且為普通文件

-h FILE 或 -L FILE:存在且為符號鏈接文件

-p FILE:是否存在且為命名管道文件

-S FILE:是否存在且為套接字文

5、文件權限測試: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?? -r FILE:是否存在且可讀

-w FILE: 是否存在且可寫

-x FILE: 是否存在且可執行 ?文件特殊權限測試: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?? -u FILE:是否存在且擁有suid權限 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?? -g FILE:是否存在且擁有sgid權限 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?? -k FILE:是否存在且擁有sticky權限 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? 6、 文件大小測試: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?? -s FILE: 是否存在且非空 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? 7、文件是否打開: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?? -t fd: fd 文件描述符是否在某終端已經打開 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? -N FILE:文件自從上一次被讀取之后是否被修改過 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? -O FILE:當前有效用戶是否為文件屬主 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? -G FILE:當前有效用戶是否為文件屬組 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?? 8、雙目測試: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ?? FILE1? -ef? FILE2: FILE1是否是FILE2的硬鏈接 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ?? FILE1? -nt? FILE2: FILE1是否新于FILE2(mtime) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ?? FILE1? -ot? FILE2: FILE1是否舊于FILE2?

9、組合測試條件的方式

第一種方式:

COMMAND1 && COMMAND2 并且

COMMAND1 || COMMAND2 或者

! COMMAND 非

如:[[ -r FILE ]] && [[ -w FILE ]] ?

第二種方式:

EXPRESSION1? -a? EXPRESSION2 并且

EXPRESSION1? -o? EXPRESSION2 或者

! EXPRESSION 必須使用測試命令進行

? ? ? ? 總結:根據上面兩個方式,可以鏈接命令和判斷,單中括號可以使用 -a -o ,雙中括號和括號外面可以使用 && 或者||

六、防止擴展和shell登錄的相關配置文件

1、防止擴展

反斜線(\)會使隨后的字符按原意解釋

$ echo Your cost: \$5.00

Your cost: $5.00 ?

加引號來防止擴展

? 單引號(’)防止所有擴展

? 雙引號(”)也防止所有擴展,但是以下情況例外: ?

$(美元符號) - 變量擴展 ?

`(反引號) - 命令替換 ?

\(反斜線) - 禁止單個字符擴展 ?

!(嘆號) - 歷史命令替換

2、shell登錄的相關配置文件

bash的配置文件 ?

按生效范圍劃分,存在兩類: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ?? 全局配置: ????????????????????????????????????????????????????????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /etc/profile ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

/etc/profile.d/*.sh ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

/etc/bashrc ? ????????????????????????????????????????????????????????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? 個人配置: ????????????????????????????????????????????????????????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ~/.bash_profile ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ~/.bashrc

不同登錄方式配置文件生效情況: ??????? ? ?

? ? ? ? ? ? ? ? ? 交互式登錄: ??????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

(1)直接通過終端輸入賬號密碼登錄 ??????? ? ?

(2)使用“su – UserName” 切換的用戶 ??????? ? ?

執行順序:/etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc ? ??????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

非交互式登錄: ??????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

(1)su UserName ??????? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? (2)圖形界面下打開的終端 ??????? ? ?

? ? ? ? ? ? ?? (3)執行腳本 ??????? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? (4)任何其它的bash實例 ??????? ? ?

? ? ? ? ? ? ? ? 執行順序: ~/.bashrc –> /etc/bashrc –> /etc/profile.d/*.sh

按功能劃分,存在兩類:??????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

profile類和bashrc類 ???????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? profile類:為交互式登錄的shell提供配置 ??????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 全局:/etc/profile, /etc/profile.d/*.sh ??????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 個人:~/.bash_profile ??????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ????????? ? ? 功用: ??????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (1) 用于定義環境變量 ??????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2) 運行命令或腳本??????? ?

? ? ? ? ? ? ?? bashrc類:為非交互式和交互式登錄的shell提供配置 ??????? ?

全局:/etc/bashrc ??????? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 個人:~/.bashrc ??????? ?

? ? ? ? ? ? ? ? ? ? ? ?? 功用: ??????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? (1) 定義命令別名和函數 ??????? ?

? ? ? ? ? ? ? ? ? ? (2) 定義本地變量

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90774

(1)
hack王和juhack王和ju
上一篇 2018-01-01 21:28
下一篇 2018-01-02

相關推薦

  • 《 Git 權威指南 》學習筆記

    這個沒辦法直接發博客了,篇幅太長,無法直接在 Blog 上排版了,直接發上 pdf 文檔了。 接 《LNAMP Shell 部署腳本》 博文的內容,線上測試系統的 Git 環境部署。 整個 Git 環境包括了:     Git / Gitweb     Gitolite / Gerrit &nbsp…

    Linux干貨 2015-10-27
  • 可伸縮的邏輯卷

    什么是邏輯卷? 邏輯卷簡稱LVM, LVM是Linux環境中對磁盤分區進行管理的一種機制,是建立在硬盤和分區之上、文件系統之下的一個邏輯層,可提高磁盤分區管理的靈活性.   為什么要使用邏輯卷? 邏輯卷相比于一般的磁盤分區, 具有更高的靈活性。可隨時伸縮空間的大小.   構建邏輯分區圖:   邏輯卷概念: PV(物理卷): 是在…

    Linux干貨 2016-09-01
  • crond實現郵件告警

    實驗環境:centos 6.8 所需軟件:mailx或msmtp或smtpEmail等 smtp客戶端程序 所需帳號:我這使用的是163郵箱。 本方案優點:安裝軟件少,無須啟動postfix等郵件服務。無須配置postfix郵件服務。由于調用的是注冊郵箱,所以也不會給移入到垃圾郵件中。  建議:生產中,不管是什么服務發送郵件的建議使用外部smtp帳…

    Linux干貨 2016-07-10
  • 管道及重定向

    管道及重定向 1、重定向 在Linux中有時我們在命令的執行過程中,不想將執行結果顯示到屏幕上,或者將其結果輸出到其他位置 這時就需要重定向來解決這個問題了 首先了解一下Linux中的3種I/O設備: 0:標準輸入 1:標準輸出 2:標準錯誤輸出 輸出重定向:> >> 輸入重定向: < << >:將標準輸出重定向到文…

    Linux干貨 2017-07-28
  • 測試so接口函數的腳本 [python]

    下面是一個測試solib庫中調用函數的測試腳本,但該腳本還存在這一些問題,我目前無法理解和解決; 問題: 1.我定義了logging采用日志滾動的方式,寫日志,并且每個日志的大小是20M,但測試結果發現日志連1M都沒到就開始輪轉了,并且在輪轉過程中,還出現logging寫日志,卻發現,日志輪轉了,結果竟然報了,輪轉日志不存在。 Traceback (most…

    Linux干貨 2016-01-05
  • 進程與計劃任務

    PID 進程號,用來標記各個進程;CentOS6中起始的第一個進程為init7中為systemd 進程優先級: 系統優先級:數字越小,優先級越高 0-139(4,5中) 各有140個運行隊列和過期隊列 0-98,99(6中) 實時優先級:99-0:值越大優先級越高 nice值:-20到19,對應系統優先級100-139或99 進程狀態: 運行:running…

    2017-05-14
欧美性久久久久