1. 程式人生 > >Shell 基礎知識整理 02

Shell 基礎知識整理 02

承接上一篇整理文章 <<Shell 基礎知識整理02>>

11. Shell 幾點說明

  • Shell 為弱型別語言,預設情況下,bash Shell 不會區分變數型別,例如:常見的變數型別為整數、字串、小數等,這和其他強型別語言(如 Java/C 語言)有所區別。當然可以通過 declare 顯示定義的變數型別

  • Shell 變數分為:環境變數(全域性變數)普通變數(區域性變數)

    • 環境變數也可以成為全域性變數,可以在建立它們的 Shell 及其派生出的任意子程序 Shell 中使用,環境變數又可以分為自定義環境變數bash 內建的環境變數
    • 普通變數也可以稱為區域性變數,只能在建立它們的 Shell 函式或 Shell 指令碼中使用。

12. 三個可以顯示變數的命令

  • set: 輸出所有變數和區域性變數
  • env: 只顯示全域性變數
  • declare: 輸出所有的變數、函式、整數和已經匯出的變數

set -o 顯示 Bash shell 所有引數配置資訊

13. 設定環境變數(全域性變數)的三種方法

  • export 變數名=value
  • 變數名=value; export 變數名
  • declare -x 變數名=value

14. 自定義全域性變數

編輯配置檔案

vim /etc/profile
export 變數名=value
source /etc/profile # 或 . /etc/profile
echo $變數名
env|grep 變數名

15. 使環境變數永久生效的常用設定檔案

(1)使用者的環境變數配置

ls /root/.bashrc
ls /root/.bash_profile

(2)全域性環境變數的配置

常見的全域性變數環境的配置檔案如下:

/etc/profile
/etc/bashrc    # 在此檔案中推薦優先設定
/etc/profile.d/

若要在登入後初始化後顯示載入內容,則把指令碼檔案放在 /etc/profile.d/ 下即可

16. 設定登入提示的兩種方式

第一種,在 /etc/motd 裡增加提示的字串

# cat /etc/motd
wlcome to linux

登陸後顯示:

Last login: Thu Oct 18 20:59:56 2018 from 125.88.24.74
welcome to linux

第二種, 在 /etc/profile.d/ 下面增加指令碼

# cat /etc/profile.d/hello.sh
# echo "welcome to linux"

登陸後顯示內容如上。

在 Java 生產環境中, 自定義環境變數的示例:

export JAVA_HOME=/application/jdk
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export RESIN_HOME=/application/resin

17. 顯示與取消環境變數

1.通過 echo 或 prinf 列印環境變數

# echo $HOME
# echo $UID
# echo $PWD
# echo $SHELL
# echo $USER
# printf "$HOME\n"
  1. 使用 env 或 set 顯示預設的環境變數
  2. 使用 unset 消除本地變數和環境變數
# echo $USER
# echo unset USER
# echo $USER

18. 環境變數初始化與對應檔案的生效順序

在登入 Linux 系統並啟動一個 bash shell 時,預設情況下 bash 會在若干個檔案中查詢環境變數的設定。這些檔案可以統稱為系統環境檔案,bash 檢查的環境變數的情況取決於系統執行 Shell 的方式。系統執行 Shell 方式一般有 3 種: 1)通過系統使用者登陸後預設執行 Shell 2)非登入互動式執行 Shell 3)執行指令碼執行非互動式 Shell

當用戶登入時,登入 Shell 載入環境的順序如下

如果使用者的 Shell 不是登入時啟動的,那麼這種非登入 Shell 只會載入 $HOME/.bashrc 並會去找 /etc/bashrc。所以,如果希望在非登入 Shell 下也可以讀取到設定的環境變數等內容,就需要將變數設定等寫入 $HOME/.bashrc 或者 /etc/bashrc, 而不是 $HOME/.bash_profile/etc/profile

19. 定義本地變數

本地變數只在使用者當前 Shell 生存期中使用。當在 Shell 中啟動另一個程序時或退出,則剛設定的變數將會無效。 1.普通變數定義

變數名=value
變數名='value'  # 常用於顯示純字串
變數名="value"  # 常用於
  1. 在 Shell 中定義變數名及為變數內容賦值的要求、 變數一般由字母、數字、下劃線組成。開頭可以以字母或下劃線開頭。

3.普通變數定義以及輸出示例

a=192.168.1.2
b='192.168.1.2
c="192.168.1.2"

echo "a=$a"
echo "b=$b"
echo "c=${c}"

20. 將命令的結果作為變數的內容賦值的方法

獲取命令結果作為變數的兩種方式:

  • 變數名= `ls`
  • 變數名=$(ls)

21. 常用的特殊位置引數變數說明

  • $0 獲取當前執行的 Shell 指令碼的檔名
  • $n 獲取當前的 Shell 指令碼的第 n 個引數值
  • $# 獲取當前執行的 Shell 指令碼後面連線的引數的總個數
  • $* 獲取當前 Shell 指令碼的所有傳參的引數
  • [email protected] 獲取當前 Shell 指令碼的所有傳參的引數

注: 注意[email protected]$*的區別,當不加雙引號時,兩者無區別;當加雙引號時,"$*" 將引數視為獨立字元,相當於 "$1 $2 $3..."; "[email protected]" 將引數視為不同的獨立字串,相當於 "$1", "$2"...

22. 獲取指令碼的路徑與名稱

# cat n.sh
echo $0
# sh n.sh
n.sh
---------------
# cat /server/scripts/n.sh
dirname $0
basename $0
# sh /server/scripts/n.sh
/server/scripts/n.sh
n.sh

23. Shell 程序變數的特殊狀態變數說明

  • $? 獲取執行上一個指令的執行狀態值(0成功,非零則失敗)
  • $$ 獲取當前執行的 Shell 指令碼的程序號(PID)
  • $! 獲取上一個在後臺工作的程序的程序號(PID)
  • $_ 獲取在此之前的命令或執行指令碼的最後一個引數