通配符和命令化學反應

@php

Linux 通配符

符號 做用
「*」 匹配任意多個,單個字符。 (經常使用)
匹配一個字符。 (幾乎不用)
[abcd] 匹配其中的單個字符
[a-z] 匹配其中的單個字符
[!abcd] 匹配其中的單個字符 (取反)
Linux特殊符號:路徑和位置相關
~ 用戶家目錄
. 表明當前目錄
「-」 表明上一次(至關於當前路徑)用戶所在的路徑
.. 表明上級目錄
Linux特殊符號:引用字符串命令相關
單引號(’’) 所見即所得,被 ’’的內容不會發生變化
雙引號(「」) 會解析變量或命令,在輸出,和不加引號相同「」表示一個總體
反引號(``) 引用命令能夠解析命令,至關與$()
空格 賦值時,若是變量內容又空格會賦值不完整。而在輸出內容時,會將含有空格的字符串視爲一個總體輸出,若是內容中有命令(要反引下)、變量等,會先把變量、命令解析出結果,而後輸出最終內容,若是字符串中帶有空格等特殊字符,則有可能沒法完整的輸出,所以須要改加雙引號,通常連續的字符串、數字、路徑等能夠不加任何引號賦值和輸出,不過無引號的狀況最好用雙引號替代之,特別是變量賦值時
**Linux特殊符號:其餘 **
表示一個命令的結束,分隔命令
「#」 註釋
$ 1. 字符串前加$,表明字符串變量內容 2. 普通用戶提示符
\ 逃脫符,轉譯符
{} 1. 生成序列 2. 變量中表示分割做用
1)在Bash中表示非,取反的意思 同^ 2)在vi/vim中表示強制 3)「!ls」 表示找出最近一次以ls開頭的命令並運行
| 將管道前邊的命令經過管道交給後邊的命令進一步處理
& 將程序放入後臺運行符
&& 前一個命令執行成功,在執行後面一個命令
Linux特殊符號:重定向系列特殊字符
0 表示標準輸入(stdin),配合<或<<使用,數據流從右向左
1 表示標準輸出(stdou),配合>或>>使用,數據流從左向右
2 標準錯誤(stderr),配合>或>>使用,數據流從左向右
0<或< 標準輸入重定向,清空已有內容,數據從文件流向處理的命令
0<<或<< 追加輸入重定向,追加內容到底部,數據從文件流向處理命令
1>或> 標準輸出重定向,正常輸出重定向到文件,會清空已有內容
1>>或>> 標準輸出追加劇定向,將內容追加到文件底部,不清空已有內容
2> 錯誤輸出重定向,將標準錯誤內容重定向到文件,如文件存在內容則清空
2>> 錯誤輸出追加劇定向,將標準錯誤內容追加到文件底部,不會清空已有內容
「>/dev/null" 黑洞
2>&1 &> 錯誤正確一塊兒追加的符號

;分號

做用 命令的分隔符 分隔多條命令linux

無論前面的命令是否執行成功都會繼續日後執行shell

案例 如何在shell中用一行來執行 mkdir oldboy touch oldboy/test.txt rm oldboy/test.txtvim

[root@backup data]# mkdir -p /root/oldboy;touch /root/oldboy/test.txt;rm /root/oldboy/test.txt
rm:是否刪除普通空文件 "/root/oldboy/test.txt"?
[root@backup ~]# ll
總用量 4
drwxr-xr-x 2 root root 4096 1月  21 21:10 data
drwxr-xr-x 2 root root   22 1月  21 21:17 oldboy

&&bash

做用 前面命令必須執行成功 在執行後面的命令 不然不會執行後面的命令code

錯誤進程

[root@backup ~]# ll 123 && mkdir old
ls: 沒法訪問123: 沒有那個文件或目錄

正確ip

[root@backup ~]# ls data/ && mkdir old            vmware-vmsvc.log
ks-script-AShK6w.log  vmware-network.1.log  X.log
ks-script-nf4aZ1.log  vmware-network.2.log  yum.log
[root@backup ~]# ll
總用量 4
drwxr-xr-x 2 root root 4096 1月  21 21:10 data
drwxr-xr-x 2 root root    6 1月  21 21:26 old
drwxr-xr-x 2 root root   22 1月  21 21:17 oldboy

: 和&結合使用字符串

[root@backup ~]# touch oldboy.txt ; ll -d data/ && touch du.txt
drwxr-xr-x 2 root root 4096 1月  21 21:10 data/
[root@backup ~]# ll
總用量 4
drwxr-xr-x 2 root root 4096 1月  21 21:10 data
-rw-r--r-- 1 root root    0 1月  21 21:28 du.txt
drwxr-xr-x 2 root root    6 1月  21 21:26 old
drwxr-xr-x 2 root root   22 1月  21 21:17 oldboy
-rw-r--r-- 1 root root    0 1月  21 21:28 oldboy.txt

||

做用 前面的命令必須執行失敗 在執行後面的命令it

[root@backup ~]# ll qwe || mkdir du
ls: 沒法訪問qwe: 沒有那個文件或目錄
[root@backup ~]# ll
總用量 4
drwxr-xr-x 2 root root 4096 1月  21 21:10 data
drwxr-xr-x 2 root root    6 1月  21 21:31 du

& Linux系統中 把當前的進程放入後臺使用

引號的區別:

不加引號 能夠解析變量 同加引號相同
雙引號 能夠解析變量 把不連續的內容做爲一個字符串
單引號 不能夠解析變量 所見即所得

引號

案例

不加引號

[root@backup ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

雙引號

案例

[root@backup ~]# echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

單引號

==案例 ==

[root@backup ~]# echo '$PATH'
$PATH

"*"表示全部

==案例 ==
查找全部的任意字符開頭以.txt結尾的文件

[root@backup ~]# ls *.txt
du.txt  oldboy.txt

查找全部的old開頭的文件

[root@backup ~]# ls old*
oldboy.txt
old:
oldboy:
test.txt

查找全部以old開頭而且.txt結尾的

[root@backup ~]# ll old*.txt
-rw-r--r-- 1 root root 0 1月  21 21:28 oldboy.txt

[root@backup ~]# find ./ -type f -name 'old*.txt'
./oldboy.txt

? 表示任意字符

[root@backup ~]# ll d?.txt
    -rw-r--r-- 1 root root 0 1月  21 21:28 du.txt

中括號[]

做用 匹配期中單個字符

[root@oldboy-lnb ~/20210118]#ll [a-z][a-z][a-z][0-9][0-9].txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu00.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu01.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu02.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu03.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu04.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu05.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu06.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu07.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu08.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu09.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu10.txt

{}大括號

做用 : 能夠生成系列 變量中表示分隔做用

[root@oldboy-lnb ~/20210118]#echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak
[root@oldboy-lnb ~/20210118]#cp oldboy.txt{,.bak}
[root@oldboy-lnb ~/20210118]#ll oldboy.txt{,.bak}
-rw-r--r-- 1 root root 0 Jan 21 12:06 oldboy.txt
-rw-r--r-- 1 root root 0 Jan 21 12:21 oldboy.txt.bak

! 對括號中內容取反

[root@backup ~]# ll [!ol]*
-rw-r--r-- 1 root root    0 1月  21 21:28 du.txt

data:
總用量 2536
-rw------- 1 root root   34270 1月  21 20:33 anaconda.log
-rw------- 1 root root  427157 1月  21 20:33 audit.log
-rw------- 1 root root   37274 1月  21 20:33 boot.log
-rw------- 1 root root    5465 1月  21 20:33 ifcfg.log
-rw------- 1 root root 1607656 1月  21 20:33 journal.log
-rw------- 1 root root       0 1月  21 20:33 ks-script-AShK6w.log
-rw------- 1 root root       0 1月  21 20:33 ks-script-nf4aZ1.lo

	[root@oldboy-lnb ~/20210118]#ll [!!so]*
	-bash: !so]*: event not found

\ 轉義

[root@oldboy-lnb ~/20210118]#ll [!\!so]*
	-rw-r--r-- 1 root root  0 Jan 21 12:11 1
	-rw-r--r-- 1 root root  0 Jan 21 12:11 123
	-rw-r--r-- 1 root root 41 Jan 21 12:06 1.txt
	-rw-r--r-- 1 root root  0 Jan 21 12:06 awk-oldboy
	-rw-r--r-- 1 root root  0 Jan 21 12:06 lidao-oldboy.txt

通配符 匹配查找文件名稱 全部命令都支持

正則在普通命令中不支持  可是通配符在正則中有特殊含義

重定向符號

做用:對文件的內容進行處理操做

">" 標準正確輸出重定向,先清空後寫入
2> 標準錯誤輸出重定向
">>" 標準錯誤追加輸出重定向
2>> 標準錯誤追加輸出重定向
0 表示標準輸入(stdin),配合<或<<使用,數據流從右向左
1 表示標準輸出(stdou),配合>或>>使用,數據流從左向右
2 標準錯誤(stderr),配合>或>>使用,數據流從左向右
0<或< 標準輸入重定向,清空已有內容,數據從文件流向處理的命令
0<<或<< 追加輸入重定向,追加內容到底部,數據從文件流向處理命令
1>或> 標準輸出重定向,正常輸出重定向到文件,會清空已有內容
1>>或>> 標準輸出追加劇定向,將內容追加到文件底部,不清空已有內容
2> 錯誤輸出重定向,將標準錯誤內容重定向到文件,如文件存在內容則清空
2>> 錯誤輸出追加劇定向,將標準錯誤內容追加到文件底部,不會清空已有內容
" >/dev/null" 黑洞
2>&1 &> 即標準錯誤和標準輸出同樣重定向到文件中

echo練習

echo 標準正確輸出重定向,先清空後寫入

[root@cs /]# echo oldboy > oldboy.txt   輸入內容到文件中
    [root@cs /]# cat oldboy.txt 
    oldboy
    [root@cs /]# echo test > oldboy.txt  
    [root@cs /]# cat oldboy.txt 
    test			覆蓋了oldboy

echo 錯誤輸出重定向

[root@cs /]# ll hahha.txt > oldboy.txt
ls: 沒法訪問hahha.txt: 沒有那個文件或目錄
[root@cs /]# ll 3.txt 2> oldboy.txt   錯誤輸出重定向
[root@cs /]# cat oldboy.txt 
ls: 沒法訪問3.txt: 沒有那個文件或目錄

echo 正確追加劇定向

[root@cs /]# echo oldboyjj >> oldboy.txt   追加內容到 oldboy.txt 
[root@cs /]# cat oldboy.txt 
ls: 沒法訪問3.txt: 沒有那個文件或目錄
oldboyjj

echo 錯誤追加劇定向

[root@cs /]# llll 1.txt 2>> oldboy.txt  把報錯內容追加到oldboy.txt
[root@cs /]# cat oldboy.txt 
ls: 沒法訪問3.txt: 沒有那個文件或目錄
oldboyjj
-bash: llll: 未找到命令

echo 同時接收正確和錯誤信息

[root@cs /]# echo hahch > oldboy.txt 2>oldboy.txt 
[root@cs /]# 
[root@cs /]# cat oldboy.txt 
hahch
[root@cs /]# echo hahh >> oldboy.txt  2>> oldboy.txt lll
[root@cs /]# cat oldboy.txt 
hahch
hahh lll
root@cs /]# ech gagag >> oldboy.txt  2>>oldboy.txt 
[root@cs /]# cat oldboy.txt 
hahch
hahh lll
-bash: ech: 未找到命令

第二種方式:

[root@cs /]# ech heheh >> oldboy.txt 2>&1
[root@cs /]# cat oldboy.txt 
hahch
hahh lll
-bash: ech: 未找到命令
-bash: ech: 未找到命令

第三種方法

[root@cs /]# echo hahah &>> oldboy.txt 
    [root@cs /]# cat oldboy.txt 
    hahch
    hahh lll
    -bash: ech: 未找到命令
    -bash: ech: 未找到命令
    hahah

Ps : 建議使用第三種

相關文章
相關標籤/搜索