1. 程式人生 > >shell 一些常用的指令 (四)

shell 一些常用的指令 (四)

六 、 字元展開

1 . less 一頁一頁地顯示任何命令的輸出

我們用 less 來一頁一頁地顯示任何命令的輸出,這極其方便!使用這項技術,我們可以方便地檢測會產生標準輸出的任一命令的執行結果。

ls -l /usr/bin | less

管道線經常用來對資料完成複雜的操作。有可能會把幾個命令放在一起組成一個管道線。 通常,以這種方式使用的命令被稱為過濾器。過濾器接受輸入,以某種方式改變它,然後 輸出它。第一個我們想試驗的過濾器是 sort。想象一下,我們想把目錄/bin 和/usr/bin 中 的可執行程式都聯合在一起,再把它們排序,然後瀏覽執行結果:

ls /bin /usr/bin | sort | less
2 . uniq - 刪除任何重複行

我們使用 uniq 從 sort 命令的輸出結果中,來刪除任何重複行。

ls /bin /usr/bin | sort | uniq | less

如果我們想看到 重複的資料列表,讓 uniq 命令帶上”-d”選項,就像這樣

ls /bin /usr/bin | sort | uniq -d | less
3 . wc - 列印行數、字數和位元組數

wc(字計數)命令是用來顯示檔案所包含的行數、字數和位元組數。例如:

wc ls-output.txt

這裡寫圖片描述

”-l”選項限制命令輸出只能 報道行數。新增 wc 到管道線來統計資料,是個很便利的方法。檢視我們的有序列表中程式個數, 我們可以這樣做

ls /bin /usr/bin | sort |uniq | wc -l

這裡寫圖片描述

4 . grep - 列印匹配行

grep 是個很強大的程式,用來找到檔案中的匹配文字。這樣使用 grep 命令

grep pattern [file.....]

這裡寫圖片描述

當 grep 遇到一個檔案中的匹配”模式”,它會打印出包含這個型別的行

比如說,我們想在我們的程式列表中,找到檔名中包含單詞”zip”的所有檔案。這樣一個搜尋, 可能讓我們瞭解系統中的一些程式與檔案壓縮有關係。這樣做:

ls /bin /usr/bin | sort | uniq | grep zip

這裡寫圖片描述

grep 有一些方便的選項:”-i”使得 grep 在執行搜尋時忽略大小寫(通常,搜尋是大小寫 敏感的),”-v”選項會告訴 grep 只打印不匹配的行。以下例子是在text.txt文字中查詢含有e的行,不區分大小寫:

grep -i e text.txt

這裡寫圖片描述

5 . head / tail - 列印檔案開頭部分/結尾部分
  • head
    head 命令列印檔案的前十行,而 tail 命令列印檔案的後十行。預設情況下,兩個命令 都列印十行文字,但是可以通過”-n”選項來調整命令列印的行數。

    head -n 5 text.txt
    head -n 10 text.txt
    head text.txt

    這裡寫圖片描述

    用在管道線中

    ls /usr/bin | tail -n 5

    使用”-f”選項,tail 命令繼續監測這個檔案,當新的內容新增到檔案後,它們會立即 出現在螢幕上。這會一直繼續下去直到你輸入 Ctrl-c。

    tail -f /var/log/messages
6 . tee

Linux 提供了一個叫做 tee 的命令,這個命令製造了 一個”tee”,安裝到我們的管道上。這裡,我們重複執行一個先前的例子, 這次包含 tee 命令,在 grep 過濾管道線的內容之前,來捕捉整個目錄列表到檔案 ls.txt:


ls /usr/bin | tee ls.txt | grep zip

7 . 字元展開 echo
echo *

shell 在 echo 命 令被執行前把”“展開成了另外的東西(在這裡,就是在當前工作目錄下的檔名字)。 當回車鍵被按下時,shell 在命令被執行前在命令列上自動展開任何符合條件的字元, 所以 echo 命令的實際引數並不是”“,而是它展開後的結果。 萬用字元所依賴的工作機制叫做路徑名展開。
這裡寫圖片描述

檢視家目錄之外的目錄:

echo /usr/*/share

以下輸出命令,不會顯示隱藏檔案,

echo *

如果展開模式以一個圓點開頭,我們就能夠在展開中包含隱藏檔案, 就像這樣

echo .*

這裡寫圖片描述

它幾乎要起作用了。然而,如果我們仔細檢查一下輸出結果,我們會看到名字”.” 和”..”也出現在結果中。由於它們是指當前工作目錄和父目錄,使用這種 模式可能會產生不正確的結果。我們可以通過這個命令來驗證:

ls -d .* | less

為了在這種情況下正確地完成路徑名展開,我們應該使用一個更精確的模式。 這個模式會正確地工作:

ls -d .[!.]?*

這種模式展開成所有以圓點開頭,第二個字元不包含圓點,再包含至少一個字元, 並且這個字元之後緊接著任意多個字元的檔名。這個命令將正確列出大多數的隱藏檔案 (但仍不能包含以多個圓點開頭的檔名)。帶有 -A 選項(“幾乎所有”)的 ls 命令能夠提供一份正確的隱藏檔案清單:

ls -A
8 . 算術表示式展開

shell 在展開中執行算數表示式。這允許我們把 shell 提示當作計算器來使用:

echo $((2+2))

算術表示式只支援整數(全部是數字,不帶小數點),但是能執行很多不同的操作。這裡是 一些它支援的操作符:
新增圖片

在算術表示式中空格並不重要,並且表示式可以巢狀。例如,5的平方乘以3:

echo $(((5**2)*3))

這裡寫圖片描述

9 . 花括號展開

通過它,你可以從一個包含花括號的模式中 建立多個文字字串。這是一個例子,就是從花括號中任選一個,組成文字字串:

echo Front-{A,B,C}-Back

這裡寫圖片描述
花括號展開模式可能包含一個開頭部分叫做報頭,一個結尾部分叫做附言。花括號表示式本身可 能包含一個由逗號分開的字串列表,或者一系列的整數,下邊的點必須是2個,不能是3個,3個不對,這種模式不能 嵌入空白字元。這個例題使用了一系列整數:

echo Number_{1..5}

這裡寫圖片描述
一系列以倒序排列的字母:

echo {Z..A}

這裡寫圖片描述
花括號展開可以巢狀:

echo a{A{1,2},B{3,4}}b

這裡寫圖片描述
要建立一系列以數值”年-月”形式命名的目錄。可以使目錄名按照 年代順序排列。

mkdir Pics
cd Pics
mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12}
ls
2007-01 2007-07 2008-01 2008-07 2009-01 2009-07
2007-02 2007-08 2008-02 2008-08 2009-02 2009-08
2007-03 2007-09 2008-03 2008-09 2009-03 2009-09
2007-04 2007-10 2008-04 2008-10 2009-04 2009-10
2007-05 2007-11 2008-05 2008-11 2009-05 2009-11
2007-06 2007-12 2008-06 2008-12 2009-06 2009-12

這裡寫圖片描述
輸出變數,$加變數名

echo $USER

要檢視有效的變數列表,可以試試這個:

printenv | less

你可能注意到在其它展開型別中,如果你誤輸入一個模式,展開就不會發生。這時 echo 命令只簡單地顯示誤鍵入的模式。但在引數展開中,如果你拼寫錯了一個變數名, 展開仍然會進行,只是展開的結果是一個空字串:

bash 也支援這種語法。它使用倒引號來代替美元符號和括號:

ls -l `which cp`
ls -l $(whic cp)
10 . 引用
echo this is a   test
echo The total is $100.00

這裡寫圖片描述

在第一個例子中,shell 利用單詞分割刪除掉 echo 命令的引數列表中多餘的空格。在第二個例子中, 引數展開把 $1 的值替換為一個空字串,因為 1 是沒有定義的變數。shell 提供了一種 叫做引用的機制,來有選擇地禁止不需要的展開。

在預設情況下,單詞分割機制會在單詞中尋找空格,製表符,和換行符,並把它們看作 單詞之間的界定符。這意味著無引用的空格,製表符和換行符都不是文字的一部分, 它們只作為分隔符使用。由於它們把單詞分為不同的引數,所以在上面的例子中, 命令列包含一個帶有四個不同引數的命令。如果我們加上雙引號:

echo "this is a    test"

這裡寫圖片描述

這裡寫圖片描述

11 . 單引號

如果需要禁止所有的展開,我們要使用單引號。以下例子是無引用,雙引號,和單引號的比較結果:

echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
12 . 轉義字元

有時候我們只想引用單個字元。我們可以在字元之前加上一個反斜槓,在這裡叫做轉義字元。 經常在雙引號中使用轉義字元,來有選擇地阻止展開。

echo "The balance for user $USER is : \$5.00"

這裡寫圖片描述
為了允許反斜槓字元出現,輸入”\“來轉義。注意在單引號中,反斜槓失去它的特殊含義,它 被看作普通字元。

這裡寫圖片描述

我們可以使用 sleep 命令建立一個簡單的倒數計數器( sleep 是一個簡單的程式, 它會等待指定的秒數:

sleep 10;echo -e "Time's up\a"
sleep 10; echo "Time's up" $'\a'

這裡寫圖片描述

相關推薦

shell 一些常用指令

六 、 字元展開 1 . less 一頁一頁地顯示任何命令的輸出 我們用 less 來一頁一頁地顯示任何命令的輸出,這極其方便!使用這項技術,我們可以方便地檢測會產生標準輸出的任一命令的執行結果。 ls -l /usr/bin | less 管道線

Linux常用命令程序的安裝與管理

rpm 編譯安裝 侯良金 linux 安裝軟件 Linux常用命令(四)程序的安裝與管理一、Linux應用程序基礎1、Linux應用程序的組成■普通的可執行程序文件。一般保存在“/usr/bin”目錄中,普通用戶即可執行。■服務器程序、管理程序文件。一般保存在“/usr/sbin”

常用指令

chmod fse 結構 inf 詳細信息 job scribe 目錄 whatis Kafka常用命令: Consumer##控制臺發送消息./kafka-console-producer.sh --broker-list 集群IP:Port --topic t

shell腳本基礎

shell一、shell中的函數 函數就是把一段代碼整理到了一個小單元中,並給這個小單元起一個名字,當用到這段代碼時直接調用這個小單元的名字即可。 1、函數格式 function f_name() { command } 函數必須要放在腳本最前面。 2、shell函數實例 實例1: [root

shell腳本案例利用 free 命令精確監控RAM的使用率

mem Linux shell shell 腳本 linux 運維 arppinging 需求:利用free命令精確監控RAM的使用率具備知識:grep,free,awk,bc 腳本如下 [root@arppining scripts]# cat mem.sh #!/bin/bash

運維工作中經常用到的一些知識總結

Lftp SLA yourls Tomcat多實例 接上篇:http://blog.51cto.com/bobo365/2125159 54、rabbitMQ http://blog.csdn.net/lishaojun0115/article/details/53152255 用戶管理 用戶

Linux shell腳本示例

shell case 是否 then 不一致 ret ats sage ase Example No. 2作為shell編寫人員,經常面對數據格式不一致的問題,將數據標準話後輸出是一個需要解決問題,本示例以MySQL的時間為例,腳本輸入月、日、年三個參數,將其標準化後輸出,

git的常用指令 git add -A 、git add . 和 git add -u

git add . :他會監控工作區的狀態樹,使用它會把工作時的所有變化提交到暫存區,包括檔案內容修改(modified)以及新檔案(new),但不包括被刪除的檔案。 git add -u :他僅監控已經被add的檔案(即tracked file),他會將被修改的檔案提交到暫存區。add -u 不會提交新檔

Linux初學時的一些常用命令4

1. 磁碟 檢視當前磁碟使用情況 df -h 檢視某個檔案大小 du -sh 檔名 如果不輸入檔名,預設是當前目錄的所有檔案之和,即當前目錄大小 2. 系統記憶體 free 3. CPU CPU 使用情況 top top -bn 1 -i -c

go語言學習-常用命令

go常用命令 go get:獲取遠端包(得裝git) go run:直接執行程式(寫程式碼時除錯用) go build:測試編譯,檢查是否有編譯錯誤 go fmt:格式化程式碼(一般不咋用,IDE都自帶了) go install:編譯包檔案並編譯整個程式 go test:執行測試檔

Java常用API——所有類的超類Object中常用方法的重寫

    先定義一個Point類用於測試(含全引數構造方法、getters和setters)。 public class Point { private int x; private int y; /**getters and setters: * getter返

必備Linux常用指令例項

後端開發人員必備的linux常用命令清單,這是我在公司給團隊小夥伴一次技術小分享的內容。還沒來得及整理好格式,先放上來跟大家分享。新手司機可以收藏、學習,老司機可以批評指正。 ps 是Process Status的縮寫,ps命令用來列出系統中當前執行的那些程序的

Runtime 常用場景

1. Runtime 怎麼新增屬性、方法? * ivar 表示成員變數 * class_addIvar * class_addMethod * class_addProperty * class_addProtocol * class_replacePropeerty 2

TensorFlow常用函式

1、tf.logging.set_verbosity():設定顯示哪些級別的日誌資訊     TensorFlow使用五個不同級別的日誌訊息。 按照上升的順序,它們是DEBUG,INFO,WARN

Linux命令列與Shell指令碼程式設計大全

一、建立函式 1.基本的指令碼函式 1.1 建立函式 function name { commands} 1.2 使用函式 在行中指定函式名就行了 ## 建立函式,注意函式名和大括號中間有空格,不然會報錯 function func1 { echo "

Lua-Nginx-Module常用指令

介紹 string類 回車 mod 利用 可選參數 option log usr 九、控制響應頭 HTTP響應頭需要配置很多重要的信息,例如添加CDN緩存時間、操作set-cookie、標記業務數據類型等。利用Lua的API可以輕松完成這些配置,並且它有豐富的模塊可供選擇。

Lua-Nginx-Module常用指令

常用 get contex 單個 配置 含義 發的 3.6 odin 本章將會講解基於LuaJIT的Lua-Nginx-Module,它作為Nginx的第三方開源軟件,擁有十分豐富的功能,可以輕松完成高並發的業務需求。 註意:本書使用的Lua-Nginx-Module版本

Lua-Nginx-Module常用指令

十四、獲取Nginx的環境變數 通過Lua API可以獲取Nginx的環境變數,用來提升某些業務處理流程,比如有些定時任務只需要在一個worker程序上執行,不需要執行多次,因此可以獲取環境變數中worker的ID,在指定的ID上執行任務即可;或者獲取Nginx的worker程序是否正在shutdown,以

Docker——常用命令

本文只列舉了幾個常用的命令,其他命令可使用--help檢視或在網上自行查閱 一、檢視當前版本 命令:docker version   或者   docker -v [[email protected] ~]# docker version Client versi

oracle常用函式----轉換函式

<div>作者:<a target=_blank href="http://www.cnblogs.com/kerrycode/" target="_blank">瀟湘隱者</a></div><div>出處:<