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"
- 使用 env 或 set 顯示預設的環境變數
- 使用
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" # 常用於
- 在 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)$_
獲取在此之前的命令或執行指令碼的最後一個引數