環境變數與檔案查詢

2021-09-10 14:13:45 字數 3561 閱讀 3251

shell中的變數有型別但不用專門指定型別名,屬於弱型別程式語言,可參與運算也有變數的作用域。

declare temp //用declare預先宣告乙個變數

也可以不用宣告,直接即用即建立,像python變數一樣:

temp=shiyanlou //直接給變數賦值,等號兩邊不能有空格

echo $temp //讀取變數的值,要注意變數前的$符號,新手容易忘

變數名與其他程式語言的變數一樣,變數名只能是英文本母、數字或者下劃線,且不能以數字作為開頭。

環境變數的作用域比自定義變數的要大,如 shell 的環境變數作用於自身和它的子程序。每個程序都有自己的環境變數設定,在預設情況下,當乙個程序被建立時,除了建立過程中明確指定的話,它將繼承其父程序的絕大部分環境設定,終端的 shell 中執行的大部分命令(如cat,cd等)都將以 shell 的子程序的方式執行。

通常涉及的變數有三種:

也有三個與上述三種環境變數相關的命令:setenvexport。這三個命令很相似,都是用於列印環境變數資訊,區別在於涉及的變數範圍不同。

關於哪些變數是環境變數,可以簡單地理解成在當前程序的子程序有效則為環境變數,

export temp //將自定義的temp變數匯出為環境變數

匯出為環境變數後,該變數在不同的子shell中仍然有效(類似於當前程序的乙個全域性變數)

但是關閉當前的 shell 之後,環境變數就沒了。怎麼才能讓環境變數永久生效呢?

按變數的生存週期來劃分,linux 變數可分為兩類:

兩個重要檔案,/etc/bashrc(存shell變數,有的linux沒有這個檔案)和/etc/profile(存環境變數),另外每個使用者目錄下的乙個隱藏檔案.profile,隱藏檔案可以用ls -a檢視,修改.profile只對當前使用者永久有效,修改/etc下的檔案(位於根目錄/)則對所有使用者永久有效。

我們在 shell 中輸入乙個命令,shell 是怎麼知道去哪找到這個命令然後執行的呢?這是通過環境變數 path 來進行搜尋的,path 裡面就儲存了 shell 中執行的命令的搜尋路徑(環境變數一般用大寫字母來表示)。

echo $path //檢視環境變數的內容

一般顯示的路徑都是存放可執行檔案的路徑,當我們在 shell 中執行乙個命令時(如cat),系統就會按照 path 中設定的路徑按照順序依次到目錄中去查詢,如果存在同名的命令,則執行先找到的那個。

接下來我們建立乙個shell指令碼,

gedit hello_shell.sh

在檔案中新增內容(第一行不可省,這不是注釋),

#!/bin/bash 

for ((i=0; i<10; i++));do

echo "hello shell"

done

exit 0

為檔案新增可執行許可權:

chmod 755 hello_shell.sh

當前目錄下執行指令碼,

./hello_shell.sh

如果將該指令碼移動到其它目錄下(如/home/shiyanlou/mybin),則再執行./hello_shell.sh會出錯,除非加上命令的完整路徑,但那樣很不方便,如何做到像使用系統命令一樣執行自己建立的指令碼檔案或者程式呢?那就要將命令所在路徑新增到 path 環境變數了。

在環境變數path末尾新增自定義路徑,路徑之間用:分割,

path=$path:/home/shiyanlou/mybin (一定要用絕對路徑)

這樣就可以在任意目錄執行那兩個命令了(注意需要去掉前面的./),但這樣我們一旦退出終端,再開啟發現又失效了。有沒有方法讓新增的環境變數全域性有效?或者每次啟動 shell 時自動執行上面新增自定義路徑到 path 的命令?後一種方式的實現——讓它自動執行。

使用者目錄下有乙個 shell 每次啟動時會預設執行乙個配置指令碼,以初始化環境,包括新增一些使用者自定義環境變數等等,zsh的配置檔案是.zshrc,相應bash的配置檔案為.bashrc。它們在 etc 下還都有乙個或多個全域性的配置檔案,不過我們一般只修改使用者目錄下的配置檔案。

可以直接將內容新增到.zshrc中:

echo "path=$path:/home/shiyanlou/mybin" >> .zshrc

上述命令中>>表示將標準輸出以追加的方式重定向到乙個檔案中,注意前面用到的>是以覆蓋的方式重定向到乙個檔案中,在指定檔案不存在的情況下都會建立新的檔案。

變數的修改方式:

path=$ //從尾向前刪/home/shiyanlou/mybin

或這可以使用萬用字元,*表示任意多個任意字元

path=$ //與上面效果一樣

unset temp //刪除乙個環境變數

我們在 shell 中修改了配置指令碼檔案之後(比如 zsh 的配置檔案 home 目錄下的.zshrc),每次都要退出終端重新開啟甚至重啟主機之後其才能生效,很是麻煩,我們可以使用source命令來讓其立即生效,如:

source .zshrc //要在當前檔案目錄下使用

source命令還有乙個別名就是.,上面的命令如果替換成.的方式就該是:

. ./.zshrc

linux中一切皆檔案

黑客帝國電影裡面的數字雨

sudo apt-get update

sudo apt-get install cmatrix

cmatrix //即可顯示

環境變數與檔案查詢

一 環境變數 1.變數 計算機用於記錄乙個值 不一定是數值,也可以是字元或字串 的符號,而這些符號將用於不同的運算處理中。通常變數與值是一對一的關係,可以通過表示式讀取它的值並賦值給其它變數,也可以直接指定數值賦值給任意變數。為了便於運算和處理,大部分的程式語言會區分變數的類 型,用於分別記錄數值 ...

環境變數與檔案查詢

一 環境變數 1 變數 預宣告變數 例 declare temp 也可以不宣告直接建立 例 temp shiyanlou 讀取變數的值 例 echo temp 2 變數型別 a.當前shell程序私有使用者自定義變數,如temp b.shell本身內建的變數 c.從自定義變數匯出的環境變數。與變數相...

Linux環境變數與檔案查詢

變數 shell中可以利用declare宣告乙個變數並進行賦值 declare name 宣告乙個叫name的變數 name hello 給name變數賦值 echo name 讀取name變數的值 通常為了與普通變數區分,環境變數為大寫。永久生效 按變數的生存週期來劃分,linux 變數可分為兩類...