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 腳本的所有傳參的參數
  • $@ 獲取當前 Shell 腳本的所有傳參的參數

注: 注意$@$*的區別,當不加雙引號時,兩者無區別;當加雙引號時,"$*" 將參數視爲獨立字符,相當於 "$1 $2 $3..."; "$@" 將參數視爲不同的獨立字符串,相當於 "$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)
  • $_ 獲取在此之前的命令或執行腳本的最後一個參數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章