了解什么是shell嗎?
知道如何查詢當前系統支持的shell版本嗎?
了解如何判斷某個指令是否是bash的內置指令嗎?
了解Linux的變量嗎,知道如何定義與刪除變量嗎,知道如何賦值嗎,知道如何獲取變量的內容嗎?
知道如何為變量設置類型嗎,了解宣告與陣列等概念嗎?
知道如何通過鍵盤輸入為變量賦值嗎?
了解如何查詢環境變量嗎?
知道如何將自定義的變量轉換為環境變量嗎?
了解變量的有效范圍嗎?
知道如何設置別名以及取消別名嗎?
1.shell基礎
Linux一般默認的shell為bash
我們知道,管理整個計算機硬件的其實是操作系統的核心(kernel),這個核心是需要被保護的!所以我們一般使用者只能通過shell來跟核心溝通,以讓核心來執行我們想要執行的工作。
Linux有多少shell呢,為什么我們要使用bash?下面來了解以下
1.硬件、核心與shell
總結一下:只要能夠操作用戶程序的接口都能夠稱為殼程序。狹隘的殼程序指的是命令行方面的軟件,包括本章介紹的bash。廣義的殼程序包括圖形接口的軟件!因為圖形接口其實也能夠操作各種應用程序來調用核心工作啊!
2.系統的合法shell與/etc/shells功能
1.查看當前Linux中的包含的shell
/etc/shells文件包含了當前Linux系統可以使用的shell(一般有多個版本)。
根據結果可知:當前系統包含2種shell。
雖然各家的shell功能差不多,但是語法還是有一定的區別的,這里推薦使用bash。
了解了shell的版本,接下來了解一下用戶何時會獲得shell呢,以及獲得的shell是哪種版本的呢?
2.shell獲得的時機與版本
當用戶登錄的時候,系統就會分配一個shell給用戶,而這個登錄取得的shell就記錄在/etc/passwd這個文件內!這個文件內容是啥?看下圖:
如上圖所示:在每一行的最后一個數據,就是你登錄后可以取得的默認的shell。root與自己注冊的用戶(zxp_user等)都是bash。
3.bash shell的功能
1.bash優點
《1》指令偏修能力
bash能記錄下用戶使用過的指令,只要在命令行上按“上下鍵”就能夠找到前/后一個輸入的指令。默認的指令記憶功能可達到1000個。
那么這些指令被記錄在哪里呢?在你的主目錄(執行 cd ~進入你的主目錄)中的.bash_history文件內。
注意:.bash_history文件記錄的是前一次登錄以前執行過的指令,而現在登錄所執行的指令都暫存於內存中,當你登出系統后,該次操作的諸多指令才會記錄到.bash_history文件中。
《2》指令與文件補全
《3》指令別名設置功能
設置別名指令:alias
上圖中講述了如何設置別名,下面了解一下如何取消別名,指令如下:
指令:unalias lm //取消別名lm
《4》程序化腳本
《5》萬用字符
* 就是萬用字符,* 代表0或多個字符。
下面介紹常用的萬用字符:
2.查詢指令是否為bash的內置指令
指令:type
當我需要知道使用的指令來自哪里(非bash提供的與bash提供的)時,就可以使用type指令查看。
4.shell變量功能
1.變量的可變性與方便性
舉例說明變量的可變性與方便性:
2.影響bash環境操作的變量
其實就是環境變量,比如PATH、HOME、MAIL、SHELL等。
3.變量的取值與創建
注意:echo的功能不僅僅只是定義變量與獲取變量的內容;echo還有很多其他的功能。
1.獲取變量內容
指令:echo $variable //使用echo獲取變量內容,變量名前必須加上美元符號$。
實例如下
2.創建變量以及設置內容
指令:echo $myname //如果這個變量不存在,那么就創建一個變量(內容為空);存在就顯示變量內容
指令:myname=zxp //將字符串“zxp”賦值給變量myname
3.刪除變量
指令:unset //刪除變量或函數
4.變量鍵盤讀取、陣列與宣告
《1》鍵盤讀取
指令:read //變量鍵盤讀取
該指令可以讀取來自鍵盤輸入的變量。
read之后不加任何參數,直接加上變量名,那么下面就會出現一個空白行等待你的輸入。
《2》宣告
就是聲明變量類型。
declare與typeset是一樣的功能,就是在“宣告變量類型”。如果使用declare后面沒有接任何參數,那么bash就會將所有變量名與內容統統顯示出來,就像是set一樣。下面看一下declare指令語法:
因此,當你需要非字符串類型的變量是,你就得進行宣告了,即聲明變量的類型。
《3》陣列
陣列就是數組。
如何創建一個數組呢?首先使用echo指令創建一個變量,使用declare指令聲明變量的類型,之后為數組變量的元素賦值,最后使用declare指令查詢變量類型和內容。
指令如下:
echo $myArray //創建變量myArray declare -a myArray //聲明變量的類型為數組(即陣列) myArray[0]=zhangsan //為數組第一個元素賦值 myArray[1]=lisi //為第二個元素賦值 declare -p myArray //顯示變量myArray的類型與內容
5.變量內容的刪除、取代與替換
注意是內容的刪除、取代與替換,注意不是變量的刪除。
變量除了可以直接she設置來修改原來的內容之外,還可以通過其他方式進行修改。如下所示:
1.變量內容的刪除與取代
6.與文件系統及程序的顯示關系
指令:ulimit
該指令的作用究竟是干嘛呢?我們想象一下:
接下來了解一下ulimit指令的用法:
已將了解了該指令的用法,那么現在實踐一下:
總結一下:你如果想讓使用者創建的文件不要太大時,可以使用ulimit指令限制使用者創建文件的大小,利用 ulimit -f 指令就可以設置。
6.bash語法總結
4.環境變量
查詢環境變量:env
查詢環境變量與自定義變量:set
5.bash shell的操作環境
1.路徑與指令搜索順序
2.bash的環境配置文件
在介紹bash的環境配置文件之前,必須先了解login shell與non-login shell。
我們經常會使用non-login shell的情況:在終端使用“su 用戶名”切換用戶。
如果你想要使用su命令以login shell的方式切換用戶那么該怎么辦:使用命令“su - 用戶名”。
這兩種登錄方式下取得bash讀取的配置文件不盡相同,接下來了解login shell與non-login shell讀取的配置文件:
《1》login shell讀取的配置文件
會讀取兩個配置文件
那么下面聊一下profile這個配置文件,通過cat查看文件內容發現會設置以下變量: