日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

科普 | Shell中傻傻分不清楚的TOP3

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 科普 | Shell中傻傻分不清楚的TOP3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

近來小姐姐又犯憨憨錯誤,問組內小伙伴export命令不會持久化環境變量嗎?反正我是問出口了。。然后小伙伴就甩給了我一個《The Linux Command Line》PDF鏈接。感謝老大不殺之恩~

Shell是命令解釋器,它會接受用戶輸入的各種命令,并傳遞給操作系統執行。它的作用類似于Windows系統的命令行。在UNIX或Linux系統中,Shell即是用戶交互的界面,也是控制系統的腳本語言。當然現在用戶也可以選擇圖形化界面做一些和操作系統的交互。層次示意圖如下:

對于初學者來說,可能搞不清楚Shell怎么會有那么多分類,Shell的語法怎么那么隨便...

小姐姐結合自己初學Shell傻傻分不清的問題點,主要從Shell的種類,變量的分類,條件測試的表達三個部分來介紹。

Shell的種類

shell程序有shbash,zsh等分類,我從網上找到一張圖可以看出shell程序的發展史。

對于這些Shell程序,其語法或多或少有一些差異,不過我們通常使用的都是bash。

Shell程序信息

在Linux系統我們可以通過一些命令查看或修改當前Shell程序信息。

一般發行版的Linux系統中,默認的shell程序就是bash。我們在寫shell腳本時,通常也會在腳本文件頭部指定bash作為腳本解釋器。

這里多說一句,zsh有時也作為猿媛們的默認shell。zsh語法大多是和bash匹配的,也不會影響shell腳本的執行(因為腳本頭部指定bash就還是bash:),也不會影響像小姐姐這樣的渣渣使用。用它是因為它有神奇的開源框架 Oh My God.. 哦不,是?Oh My Zsh?!!!

后面的內容我們還是以Linux系統中的bash為例來介紹:)

變量的分類

Shell是一門動態類型語言和弱類型語言,我們可以把變量理解為KV對,key是變量名,value是變量值。變量大體可以分為環境變量,系統變量,用戶定義的變量三類。

環境變量

比如我們經常配置的JAVA_HOME就屬于環境變量,這些變量是所有Shell程序運行時都可以使用的變量。關于環境變量的操作命令舉例如下:

使用export命令定義的環境變量只在當前運行的shell進程中有效,結束進程就沒了。所以我們要將配置變量定義在令小姐姐懵逼的一系列配置文件中,持久化下來。

說起配置文件,又不得不先提下shell程序和用戶的Interactive和Login模式:)

  • Interactive & Non-Interactive

Interactive通常是指讀入寫出數據都是從用戶的terminal,也就是我們平時用命令行打開終端就是Interactive模式,而執行一個shell腳本就是Non-interactive模式。怎么檢驗當前shell運行的模式是不是Interactive呢?小姐姐從GNU網站拷貝了一段腳本:

case "$-" in *i*) echo This shell is interactive ;; *) echo This shell is not interactive ;; esac

結果如上所述。

  • Login & Non-Login

Login模式指的是用戶成功登錄后開啟的shell進程,這時候會讀取/etc/passwd下用戶所屬的shell去執行。

Non-login模式指的是非登錄用戶狀態下開啟的shell進程,我們可以通過echo $0區分。

扯這么多是因為配置文件的加載順序和shell進程是否運行在Interactive和Login模式有關系:D

  • 配置文件加載順序

這是阿姨從網上粘的圖。bash支持的配置文件有/etc/profile,~/.bashrc等。

當調用一個Interactive&Login模式的shell進程時,配置文件的加載順序為:

/etc/profile?—>( ~/.bash_profile, ~/.bash_login, ~/.profile)其中之一?—>~/.bash_loginout(退出shell時調用)

當調用一個Interactive&non-Login模式的shell進程時,配置文件的加載順序為:

/etc/bash.bashrc?—>~/.bashrc

當調用一個non-nteractive模式的shell進程時,通常是執行腳本時,此時配置項是從環境變量中讀取和執行的,也就是env命令輸出的配置項。

另外,在開啟一個shell進程中,有一些參數的值也會影響到配置文件的加載。如--rcfile,--norc等。這些參數的含義值可以使用man bash進一步了解。只要保持默認值,其實就是我們上面介紹的配置文件加載順序。

還有,在發行版的Linux系統中,Interactive&Login模式下的~/.bash_profile, ~/.bash_login, ~/.profile并不一定是三選一,看一下這三個腳本的內容會發現他們會繼續調用下一個它想調用的配置文件,這樣就可以避免配置項可能需要在不同的配置文件多次配置的弊端了。如centos7.2 中 ~/.bash_profile文件中實際調用了 ~/.bashrc文件。

按照模式和參數設置啟動的shell程序的配置文件加載流程圖如下:

好了,到目前我們總算把環境變量中配置文件的加載順序理清了。下面列舉一些常用的Shell環境變量吧。

系統變量

Shell中系統變量主要在對參數判斷和命令返回值判斷時使用,包括腳本和函數的參數和返回值判斷。沒啥可說的,主要難記且腳本中經常出現:

用戶自定義的變量

是指我們在使用命令或腳本時定義的變量,因為shell是弱類型語言且語法XX,這里主要談談初學時的幾個坑爹點:

  • “=” 左右兩邊不能有空格

你懂我說的意思了吧。。

  • 引用

所謂引用,指的是將字符串用引用符號包括起來,以防止其中的特殊符號被Shell解釋為其他涵義。

常用的引用符號如下:

  • $

前面我們其實一直在用“$變量名來表示某個變量名的值,這其實也正是$的作用。

  • Shell中變量名的大小寫是敏感的

好了就這么多吧。

條件測試的表達

Shell腳本中除了變量,還經常出現的語法就是條件測試的判斷。不會寫腳本的開發小姐姐不是好運維,我們來一起侃侃吧。

基本語法

在Shell程序中,當指定的條件為真時,整個條件測試的返回值為 0;反之,如果指定的條件為假時,整個條件測試的返回值為 非0。

條件測試表達式的書寫有test expression?和?[ expression ]兩種形式,注意后者的空格一定不能省!!

腳本中經常出現的有字符串測試、數字測試、文件測試、邏輯操作符測試。我們一起看下:)

字符串測試

注意:這里運算符 左右兩邊又一定要有空格了(下同),這樣shell才能將之當成命令執行。

數字測試

文件測試

邏輯操作符測試

收藏 在看 轉發?起來,小姐姐就算你條件測試過關了>_<

?


參考資料:

[1].《Shell從入門到精通》

[2].https://www.edureka.co/blog/types-of-shells-in-linux/

[3].http://www.penguintutor.com/linux/basic-shell-reference

[4].https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences-between-bash-and-zsh

[5].https://sunlightmedia.org/bash-vs-zsh/

[6].https://unix.stackexchange.com/questions/439042/debian-read-order-of-bash-session-configuration-files-inconsistent

[7].https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

[8].http://howtolamp.com/articles/difference-between-login-and-non-login-shell/

[9].https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/

總結

以上是生活随笔為你收集整理的科普 | Shell中傻傻分不清楚的TOP3的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美一区二区不卡视频 | 久久久久噜噜噜亚洲熟女综合 | 成人精品水蜜桃 | 亚洲免费黄色网址 | 天天噜| julia一区二区中文久久97 | 欧美日韩国产一区二区三区在线观看 | 亚洲综合一区在线观看 | 羞羞成人| 懂色av一区二区三区免费 | 狠狠澡 | 国产按摩一区二区三区 | 欧美最猛黑人xxxx | eeuss鲁片一区二区三区在线观看 | αv在线 | 欧美性视屏 | 天堂中文资源在线观看 | 特级西西444www高清大胆免费看 | 亚洲国产精品无码久久久 | 成人小视频在线播放 | 精品探花 | 噜噜在线视频 | 亚州中文字幕 | 亚洲国产欧美精品 | 成人涩涩网 | 大香蕉视频一区二区 | 黄色一集片 | 久久婷婷影院 | 无码人妻丰满熟妇啪啪网站 | 国产精品91av | 亚洲第一毛片 | 操到喷水 | 久久久av电影 | 亚洲色图.com| av免费大全| 男人天堂手机在线 | 免费黄色在线网站 | 成人在线毛片 | 日韩一区二区影视 | 91私密视频 | 日本a在线天堂 | 欧洲成人综合 | 免费看片网站91 | 亚洲三级电影网站 | 国产黄色大片免费看 | 久久密桃 | 亚洲性夜| 九九热国产视频 | 草草在线免费视频 | 国产精品欧美一区二区三区 | 黄色在线资源 | 欧美激情国产精品免费 | 国产亚洲精品女人久久久久久 | 麻豆传媒一区二区 | 欧美性受xxxxxx黑人xyx性爽 | 日韩av电影在线播放 | 婷婷色综合 | 国产网红av| 欧美成人免费一级人片100 | 日韩在线观看视频一区 | 丰满岳乱妇在线观看中字无码 | 两口子交换真实刺激高潮 | 超碰人人擦| 国产亚洲电影 | 日韩不卡在线视频 | h片免费在线观看 | 冈本视频在线观看 | 白浆导航| 99国内揄拍国内精品人妻免费 | 国产亚洲精品久久777777 | 午夜精品一区二区三 | 欧美精品乱人伦久久久久久 | 中文字幕第15页 | 超碰在线免费97 | 成人毛毛片| 嫩模被强到高潮呻吟不断 | 久久六| 国产3区| 午夜性刺激免费视频 | 欧美,日韩,国产在线 | 久久综合综合久久 | 超碰爱爱 | 日韩一区二区三区在线看 | 久草成人在线 | 日本黄色www | 91桃色免费视频 | 调教丰满的已婚少妇在线观看 | 亚洲一区二区在线播放 | 边啃奶头边躁狠狠躁 | av天天射| 香蕉视频在线观看www | 丰满人妻一区二区三区46 | 在线视频天堂 | 九色蝌蚪91 | 在线观看黄色大片 | 亚洲欧美日韩国产成人精品影院 | 狠狠狠狠狠干 | 911香蕉视频 | 嫩草国产|