管道符、重定向和環境變數

来源:https://www.cnblogs.com/-xiaopeng1/archive/2022/05/13/16267609.html
-Advertisement-
Play Games

一、輸入重定向和輸出重定向 輸入重定向就是把文件作為命令的參數,輸出重定向就是把原本要輸出到屏幕上的內容寫到文件裡面。 (1)輸入重定向: (2)輸出重定向; 對於重定向中的標準輸出模式,可以省略文件描述符1不寫,而錯誤輸出模式的文件描述符2是必須要寫的。 示例: 重定向中的覆蓋寫入和追加寫入的不同 ...


一、輸入重定向和輸出重定向
輸入重定向就是把文件作為命令的參數,輸出重定向就是把原本要輸出到屏幕上的內容寫到文件裡面。

(1)輸入重定向:

(2)輸出重定向;

對於重定向中的標準輸出模式,可以省略文件描述符1不寫,而錯誤輸出模式的文件描述符2是必須要寫的。
示例:

重定向中的覆蓋寫入和追加寫入的不同:
覆蓋寫入就是清除原有數據,只保留最後一次的輸入;追加寫入就是保留原來的數據在後面添加後來的數據

雖然都是輸出重定向,但是標準輸出和錯誤輸出還是有區別的。如果文件存在則輸出文件內容,如果不存在則錯誤消息會輸出到屏幕,
如何把創建文件時的錯誤消息也寫入呢?示例如下

還有一種常見情況,就是我們想不區分標準輸出和錯誤輸出,只要命令有輸出信息則全部追加寫入到文件中。這就要用到&>>操作符了:

二、管道符命令
其執行格式為“命令A | 命令B”。管道命令符的作用也可以用一句話概括為“把前一個命令原本要輸出到屏幕的信息當作後一個命令的標準輸入
在修改用戶密碼時,通常都需要輸入兩次密碼以進行確認,這在編寫自動化腳本時將成為一個非常致命的缺陷。通過把管道符和passwd命令的--stdin
參數相結合,可以用一條命令來完成密碼重置操作:

如果需要將管道符處理後的結果既輸出到屏幕,又同時寫入到文件中,則可以與tee命令結合使用。

命令通配符
顧名思義,通配符就是通用的匹配信息的符號,比如星號(*)代表匹配零個或多個字元,問號(?)代表匹配單個字元,中括弧內加上數字[0-9]代表匹配
0~9之間的單個數字的字元,而中括弧內加上字母[abc]則是代表匹配a、b、c三個字元中的任意一個字元。

示例:
匹配所有在/dev目錄中且以loop開頭的文件:

如果只想查看文件名以ram開頭,但是後面還緊跟其他某一個字元的文件的相關信息,這時就需要用到問號來進行通配了

通配符不僅可用於搜索文件或代替被通配的字元,還可以與創建文件的命令相結合,一口氣創建出好多個文件。不過在創建多個文件時,需要使用大括弧,
並且欄位之間用逗號間隔:

轉義字元
四個常見的轉義字元:

我們先定義一個名為number的變數並賦值為5,然後輸出以雙引號括起來的字元串與變數信息:

而如果只需要某個命令的輸出值,可以像命令這樣,將命令用反引號括起來,達到預期的效果。例如,將反引號與uname -a命令結合,然後使用echo命令
來查看本機的Linux版本和內核信息:

三、環境變數
在Linux系統中,變數名稱一般都是大寫的,命令則都是小寫的,這是一種約定俗成的規範。Linux系統中的環境變數是用來定義系統運行環境的一些參數,比如每個用戶不同的家目錄、郵件存放位置等。可以直接通過變數名稱來提取到對應的變數值。
為了更好地幫助大家理解變數的作用,給大家舉個例子。前文中曾經講到,在Linux系統中一切都是文件,Linux命令也不例外。那麼,在用戶執行了一條命令之後,Linux系統中到底發生了什麼事情呢?簡單來說,命令在Linux中的執行分為4個步驟。
第1步:判斷用戶是否以絕對路徑或相對路徑的方式輸入命令(如/bin/ls),如果是絕對路徑則直接執行,否則進入第2步繼續判斷。
第2步:Linux系統檢查用戶輸入的命令是否為“別名命令”,即用一個自定義的命令名稱來替換原本的命令名稱。
使用rm命令刪除文件時,Linux系統都會要求用戶確認是否執行刪除操作,其實這就是Linux系統為了防止用戶誤刪除文件而特意設置的rm別名命令—“rm -i”。

可以用alias命令來創建一個屬於自己的命令別名,語法格式為“alias別名=命令”。若要取消一個命令別名,則是用unalias命令,語法格式為“unalias別名”。

第3步:Bash解釋器判斷用戶輸入的是內部命令還是外部命令。內部命令是解釋器內部的指令,會被直接執行;而用戶在絕大部分時間輸入的是外部命令,這些命令交由步驟4繼續處理。可以使用“type命令名稱”來判斷用戶輸入的命令是內部命令還是外部命令:

第4步:系統在多個路徑中查找用戶輸入的命令文件,而定義這些路徑的變數叫作PATH,可以簡單地把它理解成是“解釋器的小助手”,作用是告訴Bash解釋器待執行的命令可能存放的位置,然後Bash解釋器就會乖乖地在這些位置中逐個查找。PATH是由多個路徑值組成的變數,每個路徑值之間用冒號間隔,對這些路徑的增加和刪除操作將影響到Bash解釋器對Linux命令的查找。

常見環境變數:

Linux作為一個多用戶、多任務的操作系統,能夠為每個用戶提供獨立的、合適的工作運行環境。因此,一個相同的變數會因為用戶身份的不同而具有不同的值。

其實變數是由固定的變數名與用戶或系統設置的變數值兩部分組成的,我們完全可以自行創建變數來滿足工作需求。例如,設置一個名稱為WORKDIR的變數,方便用戶更輕鬆地進入一個層次較深的目錄:

但是這樣的變數不具有全局性,如果工作需要,可以使用export命令將其提升為全局變數,這樣其他用戶也就可以使用它了:
後續要是不使用這個變數了,則可執行unset命令把它取消掉:

作者:江公 出處:http://www.cnblogs.com/-xiaopeng1/ 本文版權歸作者和博客園共有,歡迎轉載,但必須給出原文鏈接,並保留此段聲明,否則保留追究法律責任的權利。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring Ioc源碼分析系列--Ioc容器BeanFactoryPostProcessor後置處理器分析 前言 上一篇文章Spring Ioc源碼分析系列--Ioc源碼入口分析已經介紹到Ioc容器的入口refresh()方法,並且分析了refresh()方法裡面的前三個子方法分析了一下。還記得分 ...
  • Predicate<T>:常用的四個方法 boolean test(T t):對給定的參數進行判斷(判斷邏輯由Lambda表達式實現),返回一個布爾值 default Predicate<T>negate():返回一個邏輯的否定,對應邏輯非 default Predicate<T>and(Predi ...
  • 停更這些天,業餘時間和粉絲群的幾個大佬合作寫了一個基於Spring Authorization Server的OAuth2授權伺服器的管理控制台項目Id Server,我覺得這個項目能夠大大降低OAuth2授權伺服器使用難度。可以讓你很方便地去管理OAuth2客戶端信息,甚至可以一鍵生成OAuth2 ...
  • 前言 刷題地址:https://buuoj.cn/challenges 首先打開是一個笑臉,查看源代碼,如下圖發現了,一個文件 一.代碼分析 發現是一堆代碼,需要PHP代碼審計,全部代碼如下。 1 <?php 2 highlight_file(lxx_file); 3 class emmm 4 { ...
  • Python內置函數 | V3.9.1 | 共計155個 還沒學完, 還沒記錄完, 不知道自己能不能堅持記錄下去 1.ArithmeticError 2.AssertionError 3.AttributeError 4.BaseException 5.BlockingIOError 6.Broke ...
  • 1、while迴圈 當指定的條件為真時迴圈執行代碼塊 while 語法: while (condition) { statement; } 比如: <?php $i=1; while($i<=5) { echo "The number is " . $i . "<br>"; $i++; } ?> d ...
  • 最近使用WPF開發項目,為了對WPF知識點進行總結,所以利用業餘時間,開發一個學生信息管理系統【Student Information Management System】。本文主要簡述如何通過WPF+Prism+MAH+WebApi進行開發基於三層架構的桌面版應用程式,僅供學習分享使用,如有不足之... ...
  • extcon,是External Connector的簡稱,用於抽象外部連接器,比如說Audio Jack、USB MicroB/TypeC介面等。 ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...