變數的分類(臨時(本地)變數、環境變數、全域性變數和系統變數)

bling8發表於2020-11-04

1、臨時變數

當前使用者自定義的變數,只在當前程式中有效。其他程式及當前程式的子程式無效。

(1)定義方式

  • 基本方式:變數名=變數值
[root@server1 shells]# a=4
[root@server1 shells]# echo $a
4
  • 命令執行結果輸入給變數:變數名=`執行的命令``
[root@server1 shells]# name=`hostname`
[root@server1 shells]# echo $name
server1
[root@server1 shells]# name=$(hostname)
[root@server1 shells]# echo $name
server1
[root@server1 shells]# name="$(hostname)"
[root@server1 shells]# echo $name
server1
[root@server1 shells]# a=`uname -r`
[root@server1 shells]# echo $a
3.10.0-862.el7.x86_64
  • 互動式定義變數read
    通過文字輸入
[root@server1 shells]# vim ip.txt
[root@server1 shells]# read -p "input ip:" IP < ip.txt 
[root@server1 shells]# echo $IP
192.168.13.125

通過使用者自定義

[root@server1 shells]# read -s -p "passwd:" mima
passwd:
[root@server1 shells]# echo $mima
westos

(2)證實

在這裡插入圖片描述
因為兩個終端分別分配了不同的PID,也就是不同的程式:
在這裡插入圖片描述
兩個不同的使用者呢?
在這裡插入圖片描述

2、環境變數(針對當前使用者生效)

在這裡插入圖片描述

(1)如何定義一個環境變數

  • 如果這個變數是一個已經被定義好的臨時變數,利用export 變數名,就可以將該變數改為環境變數。

  • 或者直接export 變數名=變數值

(2)實證

[kiosk@server1 shells]$ export name=kongying
[kiosk@server1 shells]$ env |grep name
name=kongying
[kiosk@server1 shells]$ /bin/bash     //開啟另一個子程式bash
[kiosk@server1 shells]$ ps  //檢視程式
  PID TTY          TIME CMD
 5169 pts/0    00:00:00 bash
10541 pts/0    00:00:00 bash
10584 pts/0    00:00:00 ps
[kiosk@server1 shells]$ env |grep name
name=kongying         //也就是說,環境變數共享於同一程式與其子程式之間

如果不同使用者呢?
也是不共享的,因為:
在這裡插入圖片描述

3、全域性變數(/etc/profile)

(1)什麼是全域性變數?

在這裡插入圖片描述
(2)相關配置檔案
在這裡插入圖片描述
/etc/bashrc:定義命令的別名、umask、函式

[kiosk@server1 shells]$ vim /etc/profile

在這裡插入圖片描述
(3)系統登陸讀取相關檔案順序:
在這裡插入圖片描述

4、系統變數

在這裡插入圖片描述

[kiosk@server1 shells]$ ldvv
bash: ldvv: command not found...
[kiosk@server1 shells]$ echo $?
127
[kiosk@server1 shells]$vim ll
[kiosk@server1 shells]$ echo $?
0
[kiosk@server1 shells]$ echo $0
/bin/bash

相關文章