當前位置:首頁 » 操作系統 » linuxshell環境

linuxshell環境

發布時間: 2023-03-26 14:46:39

linux里,什麼是shell環境

shell是用戶與作業系統之間的交互層,用戶修改其環境,設置或取消shell的環境變數,迎合用戶的需要和愛好。shell本身就是一個電腦程序,用C語言編寫,為協助用戶與作業系統之間通訊而設計,管理用戶與核心之間對話,
把作業系統指令換成機器代碼,其實PC用戶常用的DOS,本身就是一個shell。
shell的主要任務是:提示用戶打入指令,讀指令,轉換指令為核心所能理解的語言。此外,shell可以看作為指令解釋程序,提供一些工具,亦可以利用shell的編寫工具,構造電腦程序。

② LINUX快速入門第八章:Shell基礎

我們平時所說的 Shell 可以理解為 Linux 系統提供給用戶的使用界面。Shell 為用戶提供了輸入命令和參數並可得到命令執行結果的環境。當一個用戶登錄 Linux 之後,系統初始化程序 init 就根據 /etc/passwd 文件中的設定,為每個用戶運行一個被稱為 Shell(外殼)的程序。

確切地說,Shell 是一個命令行解釋器,它為用戶提供了一個向 Linux 內核發送請求以便運行程序的界面系統級程序,用戶可以用 Shell 來啟動、掛起、停止甚至編寫一些程序。

Shell 處在內核與外層應用程序之間,起著協調用戶與系統的一致性、在用戶與系統之間進行交互的作用。圖 1 是 Linux 系統層次結構圖,Shell 接收用戶輸入的命令,並把用戶的命令從類似 abed 的 ASCII 碼解釋為類似 0101 的機器語言,然後把命令提交到系統內核處理;當內核處理完畢之後,把處理結果再通過 Shell 返回給用戶。

換句話說:

Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。

Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。

Ken Thompson 的 sh 是第一種 Unix Shell,Windows Explorer 是一個典型的圖形界面 Shell。

Shell 與其他 Linux 命令一樣,都是實用程序,但它們之間還是有區別的。一旦用戶注冊到系統後,Shell 就被系統裝入內存並一直運行到用戶退出系統為止;而一般命令僅當被調用時,才由系統裝入內存執行。

與一般命令相比,Shell 除了是一個命令行解釋器,同時還是一門功能強大的編程語言,易編寫,易調試,靈活性較強。作為一種命令級語言,Shell 是解釋性的,組合功能很強,與操作系統有密切的關系,可以在 Shell 腳本中直接使用系統命令。大多數 Linux 系統的啟動相關文件(一般在 /etc/rc.d 目錄下)都是使用 Shell 腳本編寫的。

同傳統的編程語言一樣,Shell 提供了很多特性,這些特性可以使 Shell 腳本編程更為有用,如數據變數、參數傳遞、判斷、流程式控制制、數據輸入和輸出、子程序及中斷處理等。

說了這么多,其實我們在 Linux 中操作的命令行界面就是 Linux 的 Shell,也就是 Bash,但是我們的圖形界面是 Shell 嗎?其實從廣義講,圖形界面當然也是 Shell,因為它同樣用來接收用戶的操作,並傳遞到內核進行處理。不過,這里的 Shell 主要指的是 Bash。

Shell 腳本

Shell 腳本(shell script),是一種為 shell 編寫的腳本程序。

業界所說的 shell 通常都是指 shell 腳本,但讀者朋友要知道,shell 和 shell script 是兩個不同的概念。

由於習慣的原因,簡潔起見,本文出現的 "shell編程" 都是指 shell 腳本編程,不是指開發 shell 自身。

Shell的分類

目前 Shell 的版本有很多種,如 Bourne Shell、C Shell、Bash、ksh、tcsh 等,它們各有特點,下面簡要介紹一下。

最重要的 Shell 是 Bourne Shell,這個命名是為了紀念此 Shell 的發明者 Steven Bourne。從 1979 年起,UNIX 就開始使用 Boume Shell。Bourne Shell 的主文件名為 sh,開發人員便以 sh 作為 Bourne Shell 的主要識別名稱。

雖然 Linux 與 UNIX 一樣,可以支持多種 Shell,但 Boume Shell 的重要地位至今仍然沒有改變,許多 UNIX 系統中仍然使用 sh 作為重要的管理工具。它的工作從開機到關機,幾乎無所不包。在 Linux 中,用戶 Shell 主要是 Bash,但在啟動腳本、編輯等很多工作中仍然使用 Bourne Shell。

C Shell 是廣為流行的 Shell 變種。C Shell 主要在 BSD 版的 UNIX 系統中使用,發明者是柏克萊大學的 Bill Joy。C Shell 因為其語法和 C 語言類似而得名,這也使得 UNIX 的系統工程師在學習 C Shell 時感到相當方便。

Bourne Shell 和 C Shell 形成了 Shell 的兩大主流派別,後來的變種大都吸取這兩種 Shell 的特點,如 Korn、 tcsh 及 Bash。

Bash Shell 是 GNU 計劃的重要工具之一,也是 GNU 系統中標準的 Shell。Bash 與 sh 兼容,所以許多早期開發出來的 Bourne Shell 程序都可以繼續在 Bash 中運行。現在使用的 Linux 就使用 Bash 作為用戶的基本 Shell。

Bash 於 1988 年發布,並在 1995-1996年推出Bash 2.0。在這之前,廣為使用的版本是1.14,Bash 2.0增加了許多新的功能,以及具備更好的兼容性。表 2 中詳細列出了各版本的具體情況。

注意,Shell 的兩種主要語法類型有 Bourne 和 C,這兩種語法彼此不兼容。Boume 家族主要包括 sh、ksh、Bash、psh、zsh;C 家族主要包括 csh、tcsh(Bash 和 zsh 在不同程序上支持 csh 的語法)。

本章講述的腳本編程就是在 Bash 環境中進行的。不過,在 Linux 中除了可以支持 Bash,還可以支持很多其他的 Shell。我們可以通過 /etc/shells 文件來査詢 Linux 支持的 Shell。命令如下:

在 Linux 中,這些 Shell 是可以任意切換的,命令如下:

用戶信息文件 /etc/passwd 的最後一列就是這個用戶的登錄 Shell。命令如下:

大家可以看到,root 用戶和其他可以登錄系統的普通用戶的登錄 Shell 都是 /bin/bash,也就是 Linux 的標准 Shell,所以這些用戶登錄之後可以執行許可權允許范圍內的所有命令。不過,所有的系統用戶(偽用戶)因為登錄 Shell 是 /sbin/ndogin,所以不能登錄系統。

筆記:

sh/bash/csh/Tcsh/ksh/pdksh等shell的區別

③ Linux_Shell腳本編程之設置環境變數

1、export 變數名 = 變數值(功能描述:將shell變數輸出為環境變數/全局變數)
2、source 配置文件 (功能描述:讓修改後的配置信息立即生效)
3、echo $變數名 (功能描述:查詢環境變數的值)

1、在/etc/profile文件中定義TOMCAT_HOME環境變數

2、查看環境變數TOMCAT的值

3、在另外一個shell程序中使用 TOMCAT_HOME

注意:文檔多行注釋

④ 如何運行linux shell程序

如何運行shell程序,如何在shell程序以及後續腳本中使用同一個變數,這些在工作中經常用到, 我找到如下的文章,再加深復習一下。
1 source命令用法:
source FileName
作用:在當前bash環境下讀取並執行FileName中的命令。該filename文件可以無"執行許可權"
註:該命令通常用命令「.」來替代。
如:source .bash_profile
. .bash_profile兩者等效。
source(或點)命令通常用於重新執行剛修改的初始化文檔。
source命令(從 C Shell 而來)是bash shell的內置命令。
點命令,就是個點符號,(從Bourne Shell而來)。
source的程序主體是bash,腳本中的$0變數的值是bash,而且由於作用於當前bash環境,腳本中set的變數將直接起效

2 sh, bash的命令用法:
sh/bash FileName

作用:打開一個子shell來讀取並執行FileName中命令。該filename文件可以無"執行許可權"

註:運行一個shell腳本時會啟動另一個命令解釋器.
每個shell腳本有效地運行在父shell(parent shell)的一個子進程里.
這個父shell是指在一個控制終端或在一個xterm窗口中給你命令指示符的進程.
shell腳本也可以啟動他自已的子進程.
這些子shell(即子進程)使腳本並行地,有效率地地同時運行腳本內的多個子任務.
在ubuntu中sh只是bash的一個鏈接。
由於是在子shell中執行,腳本設置的變數不會影響當前shell。

3 ./的命令用法:
./FileName
作用:打開一個子shell來讀取並執行FileName中命令。該filename文件需要"執行許可權"
註:運行一個shell腳本時會啟動另一個命令解釋器.
每個shell腳本有效地運行在父shell(parent shell)的一個子進程里.
這個父shell是指在一個控制終端或在一個xterm窗口中給你命令指示符的進程.
shell腳本也可以啟動他自已的子進程.
這些子shell(即子進程)使腳本並行地,有效率地地同時運行腳本內的多個子任務.
由於是在子shell中執行,腳本設置的變數不會影響當前shell。

4 export:
一個變數創建時,它不會自動地為在它之後創建的shell進程所知。而命令export可以向後面的shell傳遞變數的值。當一個shell腳本調用並執行時,它不會自動得到原為腳本(調用者)里定義的變數的訪問權,除非這些變數已經被顯式地設置為可用。export命令可以用於傳遞一個或多個變數的值到任何後繼腳本
5. 舉例
比如您在一個腳本里export $KKK=111 ,假如您用./a.sh執行該腳本,執行完畢後,您運行 echo $KKK ,發現沒有值,假如您用source來執行 ,然後再echo ,就會發現KKK=111。因為調用./a.sh來執行shell是在一個子shell里運行的,所以執行後,結構並沒有反應到父shell里,但是 source不同他就是在本shell中執行的,所以能夠看到結果.
小測試
1 建立test.sh
#!/bin/bash
export s=/home/jboss/
2 執行命令: source test.sh
echo $s
結果輸出: /home/jboss/
3 新開個shell
執行命令: ./test.sh
echo $s
結果: 沒有輸出s值

結論:
1、執行腳本時是在一個子shell環境運行的,腳本執行完後該子shell自動退出。
2、一個shell中的系統環境變數才會被復制到子shell中(用export定義的變數);
3、一個shell中的系統環境變數只對該shell或者它的子shell有效,該shell結束時變數消失(並不能返回到父shell中)。3、不用 export定義的變數只對該shell有效,對子shell也是無效的。

直接執行一個腳本文件是在一個子shell中運行的,而source則是在當前shell環境中運行的。
source可以讓腳本影響它們的父shell環境,這和export去影響子shell環境相反.

⑤ 如何設置linux shell環境變數

不是這個概念的。
1,如果你只是想設置一個變數,沒有必要在profile裡面設置。
a=123
echo
"$a"就可以了
2,如果你是想設置環境變數(路徑),在profile或者.bashrc中
a=/dir
PATH=$PATH:$a
export
PATH
這就加入一個/dir目錄。

⑥ linux中的shell究竟是什麼

linux中的shell究竟是;

ll程序呢? 簡單的說shell程序就是一個包含若干行

shell或者linux命令的文件.

象編寫高級語言的程序一樣,編寫一個shell程序需要一個文本編輯器.如VI等.

在文本編輯環境下,依據shell的語法規則,輸入一些shell/linux命令行,形成一個完整

的程序文件.

⑦ 來學一學LINUX系統中SHELL環境的搭建技巧

什麼是 LINUX SHELL環境?shell在會話中會保存著大量信息,而這些信息就是shell環境。LINNX命令程序通過獲取SHELL環境中的數據(此處的數據通常稱為環境變數)來輸出本機相應的配置數據。


LINUX環境變數

Linux shell環境中存儲了兩種基本類型的數據:環境變數和shell變數。當然,除了變數,shell也存儲了一些可編程的數據,即別名和shell 函數。

如何查看環境變數呢?

我們可以用bash命令set,或者使用printenv命令程序來查看環境變數。

它們的區別是:set 命令不僅顯示shell數據,而且可以顯示環境變數列表,而printenv命令僅僅顯示環境變數列表。

鑒於環境變數列表比較長,我們可以將每個命令的輸出通過管道符傳遞給less 來輸出列表,例如:

//執行命令

[test@linuxprobe ~]$ printenv | less

//輸出內容:環境變數及其數值的列表

KDE_MULTIHEAD=false

SSH_AGENT_PID=6666

HOSTNAME= linuxprobe

GPG_AGENT_INFO=/tmp/gpg-PdOt7g/S.gpg-agent:6689:1

SHELL=/bin/bash

TERM=xterm

XDG_MENU_PREFIX=kde-

HISTSIZE=1000

XDG_SESSION_COOKIE=-1208521990.996705

-1177056199

GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/home/me/.gtkrc-2.0:/home/me/.kde/sh

are/config/gtkrc-2.0

GTK_RC_FILES=/etc/gtk/gtkrc:/home/me/.gtkrc:/home/me/.kde/share/confi

g/gtkrc

GS_LIB=/home/me/.fonts

WINDOWID=29360136

QTDIR=/usr/lib/qt-3.3

QTINC=/usr/lib/qt-3.3/include

KDE_FULL_SESSION=true

USER=test

LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01

:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe:


//printenv 命令也可輸出特定變數- USER的數值:

[test@linuxprobe ~]$ printenv USER

test




建立LINUX shell 環境


每當我們登錄系統後,bash 程序就會自動啟動,且會讀取一系列配置腳本,這些配置腳本被稱為啟動文件。這些啟動文件定義了可供所有用戶共享的默認shell 環境。

那麼位於家目錄中的啟動文件,定義了用戶個人的shell 環境。

確切的啟動順序取決於shell 會話類型模式。有兩種shell 會話類型模式:一個是登錄shell 會話模式,另一個是非登錄shell 會話模式。

登錄shell 會話模式中會提示用戶輸入用戶名和密碼;非登錄shell 會話模式通常在GUI下啟動終端會話時出現。

登錄shell 會話模式下啟動文件內容:


非登錄shell 會話模式下啟動文件內容:


修改linux shell環境

依據通常的操作思路,通過添加目錄到PATH 變數或定義新的環境變數,再把這些更改存放至.bash_profile 文件中;那麼對於其它的更改呢,需要存放至.bashrc 文件中。

除了系統管理員具將系統中的所有用戶修改默認設置的許可權外,其他用戶只能限定對個人家目錄下的文件進行修改。

我們通過使用一個叫做文本編輯器的程序來編輯(或讀、寫)shell 的啟動文件以及其它配置文件。文本編輯器是一個類似於文字處理器的程序,允許使用移動游標在屏幕上編輯。但不同之處在於文本編輯器不僅支持純文本,而且常包含為便於寫程序而設計的特性。由此可見,文本編輯器是開發人員用來寫代碼,以及系統管理員用來管理控制系統的配置文件的重要工具之一。

文本編輯器通常分為兩種基本類型:圖形化的和非圖形化的(基於文本)編輯器。

一些典型的圖形化編輯器有GNOME 和KDE。GNOME編輯器自帶了gedit 的編輯器,它通常在GNOME 菜單中稱為「文本編輯器」。KDE自帶了三種編輯器,分別是kedit,kwrite,kate。

那麼基於文本的編輯器有nano、vi 和emacs。

nano 編輯器是一個簡單易用的編輯器。vi 編輯器(目前已被vim (「Vi IMproved」 的簡寫)替代)是類Unix 操作系統的傳統編輯器。emacs 編輯器屬於龐大的、多用途的,可做任何操作的編程環境。

無論哪種類型的文本編輯器都可以在命令行中輸入編輯器的名字及想要編輯的文件名,執行文本編輯操作。在這篇文章中,我們學到了用文本編輯器來編輯配置文件的基本技巧。

這篇文章主要討論了linux SHELL環境的一些基礎知識及基本的操作技巧。在編寫這篇文章過程中我還參考了 《Linux就該這么學(第2版)》 這本書,基於紅帽8編寫,內容很貼近實踐,很有理論指導實踐價值的一本書籍。

⑧ linux命令和shell命令有什麼區別啊

shell翻譯成殼的意思,它是包裹在Linux內核外層的,一個可通過一系列的Linux命令對操作系統發出相關指令的人機界面。shell可以通過其條件語句和循環語句等,把一系列Linux命令結合在一起,形成一個相當於面向過程的程序,即shell
script,從而實現一些復雜的功能。
shell可以說是Linux命令集的概稱,屬於命令行的人機界面。shell是一個用C語言編寫的程序,它是用戶使用Linux的橋梁。shell既是一個命令語言,也是一個程序設計語言;其次,shell也指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。
由此可見,shell相當於經過裝飾的命令行,它與命令行一樣,都能操作Linux;但是shell是面向過程的,相當於有了一定的邏輯和過程,而命令行只是單一的操作。
linux命令是對Linux系統進行管理的命令。對於Linux系統來說,無論是中央處理器、內存、磁碟驅動器、鍵盤、滑鼠,還是用戶等都是文件,Linux系統管理的命令是它正常運行的核心,與之前的DOS命令類似。linux命令在系統中有兩種類型:內置Shell命令和Linux命令。
shell與linux命令的區別
1、直接在命令行執行,就是在當前的shell環境下執行,比如涉及到一些環境變數的時候,必須在當前shell環境里執行。
2、在腳本執行的話,會fork一個子進程,所有操作都在子進程中進行。如果涉及到一些在腳本里設置環境變數的東西,腳本結束了,環境變數就消失了,如果是修改環境變數的話,需要特別注意。
3、shell可以重復或批量地進行一些命令,你也可以把自己要重復執行的命令寫到腳本裡面執行,而命令行的話就需要一個一個的輸入命令,比較麻煩。

⑨ linux shell腳本執行命令詳解

在Linux下,如果你需要執行shell腳本,那麼應該使用那個命令呢?下面由我為大家整理了linux shell腳本執行命令的相關知識,希望對大家有幫助!

linux shell腳本執行

linux shell腳本執行方法一: 切換到shell腳本所在的目錄(此時,稱為工作目錄)執行shell腳本:

cd /data/shell

./hello.sh

./的意思是說在當前的工作目錄下執行hello.sh。如果不加上./,bash可能會響應找到不到hello.sh的錯誤信息。因為目前的工作目錄(/data/shell)可能不在執行程序默認的搜索路徑之列,也就是說,不在環境變數PASH的內容之中。查看PATH的內容可用 echo $PASH 命令。現在的/data/shell就不在環境變數PASH中的,所以必須加上./才可執行。

linux shell腳本執行方法二: 以絕對路徑的方式去執行bash shell腳本:

/data/shell/hello.sh

linux shell腳本執行方法三: 直接使用bash 或sh 來執行bash shell腳本:

cd /data/shell

bash hello.sh

cd /data/shell

sh hello.sh

注意,若是以方法三的方式來執行,那麼,可以不必事先設定shell的執行許可權,甚至都不用寫shell文件中的第一行(指定bash路徑)。因為方法三是將hello.sh作為參數傳給sh(bash)命令來執行的。這時不是hello.sh自己來執行,而是被人家調用執行,所以不要執行許可權。那麼不用指定bash路徑自然也好理解了啊。

linux shell腳本執行方法四: 在當前的shell環境中執行bash shell腳本:

cd /data/shell

. hello.sh

cd /data/shell

source hello.sh

前三種方法執行shell腳本時都是在當前shell(稱為父shell)開啟一個子shell環境,此shell腳本就在這個子shell環境中執行。shell腳本執行完後子shell環境隨即關閉,然後又回到父shell中。而方法四則是在當前shell中執行的。

熱點內容
家用伺服器怎麼選 發布:2024-03-29 00:49:18 瀏覽:400
Ap6510dn如何配置 發布:2024-03-29 00:38:47 瀏覽:332
安卓和蘋果哪個更佔用內存 發布:2024-03-29 00:37:02 瀏覽:423
編譯錯誤算bug嗎 發布:2024-03-29 00:23:03 瀏覽:33
c語言干什麼 發布:2024-03-29 00:05:35 瀏覽:314
香港中轉伺服器搭建 發布:2024-03-29 00:05:16 瀏覽:673
安卓手機怎麼在桌面上顯示鍾表 發布:2024-03-28 23:48:22 瀏覽:5
分析代碼能編譯嗎 發布:2024-03-28 23:48:16 瀏覽:767
c語言與易語言 發布:2024-03-28 23:46:25 瀏覽:588
ai壓縮腳本 發布:2024-03-28 23:41:10 瀏覽:988