這篇文章為大家帶來了linux系統中shell程式設計的相關知識,在學習Shell程式設計之前,我們應該要先知道什麼是Shell,還有什麼是shell腳本,希望對大家有幫助。
一. 什麼是Shell
1. 在學習Shell程式設計之前,我們應該先知道什麼是Shell
# 使用者、Shell、Linux核心、硬體的關係如下圖:
Shell是應用程式,也可以說是一個命令解譯器,它是使用者解釋器,它是使用者和Linux內核之間的橋樑,可以將使用者在圖形介面上的操作或在終端輸入的命令傳遞給Linux內核,然後Linux內核再調度各個硬體及其他資源來完成使用者的操作。
什麼是Linux的核心?在Linux作業系統中,真正能夠操作電腦硬體完成某個使用者功能的那一部分被稱為Linux系統的核心。使用者在使用Linux系統時,是不可以直接操作核心的,而是透過Shell來間接的操作核心的。 Shell不屬於內核的一部分,而是在Linux內核之外開發的應用程序,它將接收到的用戶滑鼠點擊操作或輸入的命令傳遞給內核,而內核再去調度硬體去完成指定的操作。這樣使用者就不需要直接操作內核,而是透過Shell間接地操作內核,內核也不會被直接的暴露於外部,保障了內核的安全性,也簡化了使用者的操作。
Shell這個應用程式是開機即啟動的,我們在操作Linux系統時,無時不刻都在直接或間接地透過Shell去操作Linux核心。其實,在沒有圖形化介面之前,使用者是透過終端機或是控制台直接去呼叫Shell這個應用程序,然後透過輸入指令來操作Linux系統的。使用者在控制台或終端機上看到的 $ 和 # 其實就是Shell的命令提示符,這表示使用者已經進入了Shell這個程序,只需要輸入指令,即可透過Shell來操作Linux核心。只不過root用戶登入顯示$,而普通用戶登入顯示#。
另外,Shell在將使用者的操作傳遞給核心的過程,就是在呼叫核心所提供的API介面的過程。例如,使用者在圖形介面或終端命令列做了一個開啟檔案的操作,而這個使用者的操作Shell接收到後,就會去呼叫核心提供的對應的函數,然後核心再去調度硬體資源來完成使用者的操作。
2. 常見的Shell
我們知道,Linux 是一個開源的作業系統,它是由世界各地的多個組織機構或個人共同開發的,每個組織機構或個人負責一部分功能,最後組合在一起,就構成了現在我們使用的Linux。也正是這個原因,這些不同的組織機構或個人都會開發出可以在Linux系統中使用的應用程序,而這些應用程式的功能可能是類似的,各有優缺點,至於使用哪一個由用戶選擇。而Shell就是這樣的一個應用程序,所以Shell有很多個版本,目前Linux的大多數發行版預設使用的Shell是 bash shell。其他常見的Shell版本如下:
(1) sh:sh 的全名是 Bourne shell,是 UNIX 上的標準 shell,許多 UNIX 版本都配有 sh。 sh 是第一個流行的 Shell。
(2) csh:這個 shell 的語法有點類似C語言,所以才得名為 C shell ,簡稱為 csh。
(3) tcsh:tcsh 是 csh 的增強版,加入了指令補全功能,提供了更強大的語法支援。
(4) ash:一個輕量佔用資源少的 Shell,適合運行於低記憶體環境,與 bash shell 完全相容。
(5) bash:bash shell 由 GNU 組織開發,維持了對 sh shell 的相容性,是各種 Linux 發行版預設設定的 shell。
3. 查看Linux系統的Shell
在Linux系統中,一般預設使用的Shell是使用的Shell為一般。 Shell是一個應用程序,一般都是放在/bin
或/user/bin
目錄下,而當前Linux 系統可用的Shell 都記錄在/etc/shells
檔案中。
(1) 檢視系統目前可用的Shell,執行指令【cat -n /etc/shells】:
(2) 檢視系統目前默認使用的shell,執行指令【echo $SHELL】:
(3) 查看個別使用者使用的Shell,執行指令【cat -n /etc/passwd】:
二. 什麼是Shell程式設計
1. 什麼是Shell程式語言
我們已經知道,Shell是一個應用程序,而這個應用程式不單單只是可以將用戶的操作命令傳遞給Linux內核,它也支援程式設計。 Shell都會對應一套程式語言的語法,而這套語言就被稱為Shell程式語言或Shell腳本語言。 Shell程式語言和JavaScript語言一樣是一種腳本語言,它不需要編譯,而它的解釋器就是Shell應用程式本身。
我們平常工作所說的Shell,大多數情況指的是Shell腳本語言,而不是Shell應用程式。
2. 什麼是Shell腳本
我們在使用Shell腳本語言時,可以和Linux系統的其他操作指令結合使用(如ls、grep等等),而我們使用Shell腳本語言和其他指令結合編寫能夠完成某個特定功能的副檔名為.sh的文本,就叫做Shell腳本程式。
3. 第一個Shell腳本
我們已經知道,Shell有許多版本,而每個版本所支援的Shell腳本語言語法可能是有差異的,而下面的關於Shell腳本的所有例子都是針對於Bash Shell這個版本而言。
(1)在根目錄下新建一個Hello.sh腳本:【vim Hello.sh】
(2)然後輸入以下內容:
#!/bin/bash echo "Hello World "
第一行:#! 是一個約定標記,它可以告訴系統這個腳本要使用哪個Shell版本作為解釋器,後面緊接的/bin/bash則是Shell的所在路徑,所以【#!/bin/bash 】表示聲明使用bin目錄下的bash shell 作為這個腳本的解釋器;
第二行:【echo "Hello World "】表示輸出文字Hello World ! ;
(3)然後儲存退出:【!wq】;
(4)這樣,一個能夠輸出 Hello World !的腳本就編寫完成。
補充說明:
上面我們已經說過,Shell程式就是Shell腳本語言的解釋器,而我們在使用終端機時(例如透過Xshell連接Linux伺服器的終端),其實就是已經進入了Shell這個程序,所以其實我們是可以在終端直接輸入Shell程式語言的程式碼來運行的,而不需要寫在腳本裡再去運行。例如,宣告一個變數並列印這個變數的值:
(1)輸入程式碼:【name=張三】,表示定義了一個變數name,它的值為張三;
(2)輸入代碼:【echo $name】,表示列印變數name的值。
當然,這種方式只適合執行邏輯簡單只有一兩句程式碼的情況,大多數情況下我們還是將Shell程式碼寫在.sh腳本中再去執行。
4. 執行Shell腳本的方式
上面我們已經寫了一個能夠輸出 Hello World !的Shell腳本運行,而現在我們就要執行 Hello.sh 這個腳本。而Shell腳本的執行方式有兩種:
第一種:給予.sh文字執行權限,然後執行文字:
(1)先給予Shell腳本可執行權限:【chmod x
Hello.sh
】;
(2)直接執行:絕對路徑:【/Hello.sh】 或 相對路徑: 【./Hello.sh】
注意,而這裡執行時如果使用的是相對路徑,必須以./開頭,表示目前目錄,否則系統會找不到不到腳本,從而導致執行失敗。
第二種:將Shell 腳本作為參數傳遞給Bash Shell 解釋器:
(1)這裡使用Bash Shell來作為解釋器,那麼我們直接調用Bash Shell 這個程序,然後把Hello.sh這個腳本當作參數傳給Shell即可:【/bin/bash Hello.sh】或【bash Hello.sh】
(2)這裡需要注意,使用這種方式執行Shell腳本時,在Shell腳本的第一行中就不需要聲明使用哪個版本的Shell來作為解釋器,也就是不需要這行程式碼【#!/ bin/bash】,因為我們在執行腳本的指令中【/bin/bash Hello.sh】,就已經指明了使用哪個版本的Shell作為解釋器。
注意,這種方式執行腳本檔案時,如果使用的是相對路徑,那麼【/bin/bash ./Hello.sh】和【/bin/bash Hello.sh】是一樣的,並且無使用第一種執行方式中的差異。
相關推薦:《Linux影片教學》
以上是完全掌握Linux系統的Shell編程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

linux设备节点是应用程序和设备驱动程序沟通的一个桥梁;设备节点被创建在“/dev”,是连接内核与用户层的枢纽,相当于硬盘的inode一样的东西,记录了硬件设备的位置和信息。设备节点使用户可以与内核进行硬件的沟通,读写设备以及其他的操作。

区别:1、open是UNIX系统调用函数,而fopen是ANSIC标准中的C语言库函数;2、open的移植性没fopen好;3、fopen只能操纵普通正规文件,而open可以操作普通文件、网络套接字等;4、open无缓冲,fopen有缓冲。

端口映射又称端口转发,是指将外部主机的IP地址的端口映射到Intranet中的一台计算机,当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上;可以通过使用动态或固定的公共网络IP路由ADSL宽带路由器来实现。

在linux中,交叉编译是指在一个平台上生成另一个平台上的可执行代码,即编译源代码的平台和执行源代码编译后程序的平台是两个不同的平台。使用交叉编译的原因:1、目标系统没有能力在其上进行本地编译;2、有能力进行源代码编译的平台与目标平台不同。

在linux中,eof是自定义终止符,是“END Of File”的缩写;因为是自定义的终止符,所以eof就不是固定的,可以随意的设置别名,linux中按“ctrl+d”就代表eof,eof一般会配合cat命令用于多行文本输出,指文件末尾。

在linux中,可以利用“rpm -qa pcre”命令判断pcre是否安装;rpm命令专门用于管理各项套件,使用该命令后,若结果中出现pcre的版本信息,则表示pcre已经安装,若没有出现版本信息,则表示没有安装pcre。

linux查询mac地址的方法:1、打开系统,在桌面中点击鼠标右键,选择“打开终端”;2、在终端中,执行“ifconfig”命令,查看输出结果,在输出信息第四行中紧跟“ether”单词后的字符串就是mac地址。

在linux中,rpc是远程过程调用的意思,是Reomote Procedure Call的缩写,特指一种隐藏了过程调用时实际通信细节的IPC方法;linux中通过RPC可以充分利用非共享内存的多处理器环境,提高系统资源的利用率。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver Mac版
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。