當前位置:
首頁 > 最新 > Shell 中的命令替換及參數擴展

Shell 中的命令替換及參數擴展

今天和大家分享的主要是 「命令替換」 以及 「參數擴展」 。

-- 季文康

本文導航

? 前言

00%

? 什麼是命令替換

14%

? 1、一層 SHELL 嵌套

15%

? 2、二層 SHELL 嵌套

17%

? 3、進階

30%

? 什麼是參數擴展

44%

? 1、實例一

46%

? 2、實例二

52%

? 什麼是變數擴展

57%

? 1、變數替換

65%

? 2、變數切片

74%

? 3、變數修改

80%

? 更深入學習,探索資料

95%

轉載自 | http://www.cnblogs.com/itxdm/p/something_of_shellscirpt.html

作者 | 季文康

前言

其實,你現在閱讀到的是第三版的文章(幾乎全部重構)。記得我寫第一版的時候,還是一名 「參賽選手」。後來比賽失利便和朋友一起做 IDC 創業。第二次改的時候,是我發現閱讀量在倆三個月內直接自己站點 top 到第一,加上參與了開源社區,維護了LCTT-CLI項目。最後第三次也就是這次,是因為通過了 RHCE 模擬考加上一年多積累。所以這次的內容或是排版都應是最棒!BTW:這篇文章在我的博客IT兄弟盟

[2]

,依舊是第一的閱讀量!

一開始寫這篇文章是因為兼職創業 IDC 公司運維,需要一點 shell script 來實現某些需求。雖然現在已經是 Python 的時代了。插個話題,我怎麼理解 Python 和 Shell 呢?拿游泳來做個比喻:前者是正規游泳館,有正規教練輔助相伴;後者是鄉下小湖泊,麻雀雖小五臟俱全。人工智慧選中的 Python 勢必鋒不可當,經典的 Shell 也相當精妙絕倫。比如以前我寫 Shell 的時候用了很多 語句、 語句,有 語句,懂得 輔助,這是最小白的。後面學習了很多比較運算符,但多數還是在積累命令數量以及條件語句。再到現在,我開始去思考命令和命令之間存在的關係、語句分隔符的意義、BASH 控制結構等等。

所以今天和大家分享的主要是 「命令替換」 以及 「參數擴展」 。

什麼是命令替換

簡單的來說就是在 SHELL 內嵌套多條命令,一次性執行得到結果。

1、一層 SHELL 嵌套

2、二層 SHELL 嵌套

使用 讀取文件內容,再使用管道符二次處理後。執行!

注意:這裡已經用了一層嵌套,以下多個小節會套用以實現二層嵌套。

a. 使用 "$()" 進行二層嵌套

b. 使用 "|" 進行命令導向

c. 注意事項以及解答一些疑問

可能有讀者已經注意到了,之前在簡單 SHELL 一層嵌套中說了嵌套還有另一種。那為什麼不使用 進行嵌套。

? 根本的原因是: 不支持命令嵌套執行!

? 強制執行。也只能認出第一組,其餘按照空格作為間隔各個執行 或 按照管道符(含)直到末尾執行。

? 比較陳舊。容易與「單引號」混淆。

? 它是美式鍵盤左上角 ESC 下面的包含 的反引號鍵!

? 已有替代品。 格式受到POSIX標準支持,也利於嵌套。

? 可以多層嵌套類似 ,但如果內部有一個 也是可以執行的喲(出於兼容考慮)!

3、進階

之前我們介紹了 和 ,這倆種命令執行。

想來現在你一定對命令執行有比較深的理解了。現在,我們需要再進階一下~

1、 與

關於 與 ,和 一樣都是 父類下的相關概念。

提示: 頭部大括弧右側必須有一個空格,尾部括弧左側必須有分號結尾。

注意: 只是對一串命令重新開一個 子 shell 進行執行, 對一串命令在 當前 shell 執行。

2、 與 造成的影響

a. 括弧內的語句影響在括弧內

b. 括弧內的語句影響到全局。

注意: 改變 的變數以後,外部也受到了影響。

什麼是參數擴展

參數擴展的基本格式是 ,擴展的結果是 被替換為相應的值。

1、實例一

首先解釋下 是什麼意思。在我們寫 時必不可免的需要傳遞參數以實現自定義變數。當超過阿拉伯數字 以後。就需要使用 明確告訴第 個參數是 。

提示:上圖顯示 就是因為 不滿足 。系統將 拆分成 和 ,所以運算後結果是 。

2、實例二

這個實例中,我想輸出 。已經定義了一個 的變數為 ,只要加上 就可以成為 「笨啦啦」。

但是很顯然的不加 是無法做到使變數 配合 顯示出 的!

什麼是變數擴展

從官方定義上來說,我並不應該將 「變數擴展」 無中生有出來。

" 字元引入參數擴展,命令替換或算術擴展。" —— 官方手冊

主要是出於倆個方面考慮:

? 多數接受。國內出現了大量 」變數擴展「 的文章,多數人已經接受這個名稱。

? 便於理解。參數就是 括弧內的東西,而變數一詞可表示所有操作圍繞變數展開。

? 便於記錄。切分以後,對寫這篇文章的排版有幫助。亦可以從基礎、中級、高級有一定水平劃分。

實例:

現在我們有了這樣的一個句子,我希望做一些判斷、摘取(或者說:切片)或修改。我該如何操作?

1、變數替換

a.

如果 未設置或為空,則替換成 。

b.

同上。位置參數和特殊參數不能以這種方式分配。

c.

當變數 未設置或為空,shell 也是可交互時,進行報錯並且退出。如果 shell 不可交互,則發生變數替換。

d.

如果 為空或未設置,那麼就什麼都不做。不然使用 進行替換。

提示: 在我測試的時候,我發現並不是全局生效的。

2、變數切片

a. 範圍切片(同方向)

注意:倆個數字都是從頭開始數的。

b. 範圍切片(非同向)

提示:倆種寫法都是正確的。

c. 切片位置

提示 :首先建立變數 ,然後使用 將字元數量讀了出來。

3、變數修改

a. 簡單修改

提示:個人認為這種是最好的方式了,可以範圍式修改(包含刪除)。

b. 簡單刪除

c. 附:表格

更深入學習,探索資料

?Bash 實例,第二部分

[3]

? Bash 參考手冊:Bash Reference Manual

[4]

? Shell-Expansions 章節:Shell-Expansions

[5]

? Shell Parameter Expansion 章節Shell Parameter Expansion

[6]


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux中國 的精彩文章:

因為這個我要點名批評 Hacker News
Neo4j 和圖資料庫起步
如何在 Bash 中抽取子字元串
AWS 幫助構建 ONNX 開源 AI 平台

TAG:Linux中國 |