目錄
- 一、環境變量的概念
- 二、 常見的環境變量
- 1.查看環境變量的方法
- 2.PATH
- 3.HOME
- 4.SHELL
- 三、環境變量的相關指令
- 四、命令行參數
一、環境變量的概念
環境變量(environment variables)一般是指在操作系統中用來指定操作系統運行環境的一些參數
如:我們在編寫C/C++代碼的時候,在鏈接的時候,從來不知道我們的所鏈接的動態靜態庫在哪里,但 是照樣可以鏈接成功,生成可執行程序,原因就是有相關環境變量幫助編譯器進行查找。
環境變量通常具有某些特殊用途,還有在系統當中通常具有全局特性 。
我們寫了一個程序,編譯好形成一個可執行文件,也稱為命令。
我們在執行我們自己寫的程序時需要加上 ./程序名:本質是幫系統確認對應的程序在哪里
什么原理?玩下看
windows系統下的環境變量
二、 常見的環境變量
PATH : 指定命令的搜索路徑
HOME : 指定用戶的主工作目錄(即用戶登陸到Linux系統中時,默認的目錄)
SHELL : 當前Shell,它的值通常是/bin/bash。
1.查看環境變量的方法
echo $環境變量名
?
?
?
2.PATH
怎樣使自己的命令不帶路徑執行?
1.可以將自己的命令拷貝到,PATH環境變量的路徑下。
但是這種情況非常不推薦,會污染系統的命令池。
2.可以將將命令的當前路徑添加到PATH環境變量中。(關閉Xshell時會失效)
export PATH=$PATH:當前命令所在路徑
實例:
PATH:Linux系統的指令搜索路徑
3.HOME
為什么普通用戶開始進入的目錄是在/home/wt下,而root用戶進入時是在/root下呢?這是因為環境變量HOME是不同的
普通用戶
root
4.SHELL
執行shell 命令所在路徑:
三、環境變量的相關指令
了解環境變量的相關指令之前,需要先了解本地變量
本地變量,只會在本BASH中有效,不會被繼承,如果想被繼承,需要export導出
?
使用echo命名查找本地變量
但是我們知道本地變量不能被繼承,調用指令一般會產生新的進程,那echo是如何將myval的值打印出來呢?
?
提出新的概念:
1.常規命令 – 通過創建子進程完成
2.內建命令 – bash不創建子進程,而是由自己親自執行,類似于bash調用了自己寫的,或者系統提供的函數
- echo:顯示某個環境變量值
- export:設置一個新的環境變量
- env:顯示所有環境變量
- unset:清除環境變量
- set:顯示本地的shell變量和環境變量
env 指令
顯示所有環境變量
?
set
顯示本地的shell變量和環境變量
?
export
設置一個新的環境變量,可將本地的環境變量導入到全局
?
unset
清除環境變量
四、命令行參數
為什么執行 ls命令時會帶-a -l -n各種選項,其實這些選項就是命令行參數。
命名行參數為指令,工具,軟件等提供命令行選項的支持。
通過命令獲取命令行參數:
#include<stdio.h>
#include<unistd.h>int main(int argc, char*argv[]) // main函數的隱藏參數
{for(int i = 0; i < argc; ++i){printf("argv[%d]-> %s\n",i,argv[i]); }return 0;}
數組指向的這些./test -a -b -c就是命令行參數,通過main函數保存在argv數組中,argc表示參個數。
其實命令行參數的本質是:指令有很多選項,每個選項對應不同的功能,選項的底層使用的是命令行參數。
有了命令行參數我們可模擬實現指令的功能
一條指令的多種功能其實就是通過判斷命令行參數實現不同的功能
由此,我們獲取環境變量的方式有多種
1.通過參數列表獲取環境變量
我們所運行的進程,都是子進程,bash本身再啟動的時候,會從操作系統的配置文件中讀取環境變量信息,子進程會繼承父進程交給我的環境變量。每個程序都會收到一張環境表,環境表是一個字符指針數組,每個指針指向一個以’\0’結尾的環境字符串
如何驗證子進程繼承父進程的環境變量
?
2.通過代碼獲取環境變量(常用)
3.第三方變量 environ