Bash的基礎特性(二)
glob文件通配符 (* ; ? ; [ ] ; [^ ] )
-
星號* 匹配任意所有字符的
[root@lyp ~]# ls h*
hello.sh hello.shbak
?匹配單個字符
ls ???? 查看四個字符命名的文件
[0-9]匹配數字
[a-z] 字母 字母的順序安裝 a A b B c C… z Z 匹配的a-z
[A-Z] 字母 字母的順序安裝 a A b B c C… z Z 匹配的A-Z 不要跟符號擴展混淆{A..Z}
[wang] 匹配列表中的任何的一個字符 ls [wang]* 匹配的是w* a* n* g*
[^wang] 匹配列表中的所有字符以外的字符 ls [^ab]* 查詢除了a或者b開頭的文件名 -
常用幾種:
[:digit:]:任意數字,相當于0-9
[:lower:]:任意小寫字母
[:upper:] : 任意大寫字母
[:alpha:] : 任意大小寫字母
[:alnum:]:任意數字或字母
不常用的:
[:blank:] : 匹配水平空白字符 touch ‘a b’
[:punct:] : 匹配標點符號 touch ‘a..b’
[:print:]:可打印字符
[:cntrl:]:控制(非打?。┳址?
[:graph:]:圖形字符
[:xdigit:]:十六進制字符
I/O重定向及管道 ( > ; >> ; 2> ; 2>> ; &> ; &>> . < ; << . | . )
創建文件的時候內核或者內存產生一個記錄專門標識這個文件 fd(file descriptor)
生產常見的故障 開發 打開一個文件沒有執行關閉操作,文件描述符不停增加,內存可能會滿
文件描述符使用完了,這個時候就無法寫文件。
三種最常見的文件描述符去標識我們的三個設備
0 標準輸入(STDIN) 默認鍵盤(指令和數據)
1 標準輸出(STDOUT) 默認終端(顯示器)
2 標準錯誤輸出(STDERR) 默認終端(顯示器)
I/O(IN/Out)重定向,指的改變默認輸入輸出的位置
輸出重定向: > ; >>
- 標準輸出重定向: >
[root@lyp test]# date > date.log [root@lyp test]# cat date.log Tue Mar 28 01:30:46 CST 2017
- 標準輸出追加重定向:>>
[root@magedu user]# date >> bash [root@magedu user]# date >> bash [root@magedu user]# cat bash Tue Mar 28 21:48:43 CST 2017 Tue Mar 28 21:48:58 CST 2017
- 錯誤輸出重定向: 2>
[root@lyp test]# fdfdfdfd > date.log bash: fdfdfdfd: command not found...
[root@lyp test]# fdfdfdfd 2> date.log [root@lyp test]# cat date.log bash: fdfdfdfd: command not found...
- 錯誤輸出追加重定向 : 2>>
[root@lyp test]# fdfdfdfd 2>> date.log [root@lyp test]# fdfdfdfd 2>> date.log [root@lyp test]# fdfdfdfd 2>> date.log [root@lyp test]# cat date.log bash: fdfdfdfd: command not found...
bash: fdfdfdfd: command not found...
bash: fdfdfdfd: command not found...
bash: fdfdfdfd: command not found...
- &> &>> 將標準輸出和標準錯誤輸出(覆蓋|追加)同一個文件
[root@lyp test]# date &> date.log [root@lyp test]# cat date.log Tue Mar 28 01:40:48 CST 2017 [root@lyp test]# date &>> date.log [root@lyp test]# cat date.log Tue Mar 28 01:40:48 CST 2017 Tue Mar 28 01:41:14 CST 2017 [root@lyp test]# datefdfd &>> date.log [root@lyp test]# cat date.log Tue Mar 28 01:40:48 CST 2017 Tue Mar 28 01:41:14 CST 2017 bash: datefdfd: command not found...
-
(cal 2004;datefdfd) > date.log
錯誤輸出到終端;標準輸出到date.log中
輸入重定向 : <
先通過tr命令來引入輸入重定向的含義及應用
-
tr [OPTION]… SET1 [SET2]
tr ‘a-z’ ‘A-Z’ < /etc/fstab
-d
[root@lyp test]# tr ‘a-z’ ‘A-Z’ < /etc/fstab > FSTASB.log
[root@lyp test]# tr -d ‘0-9’ < /etc/fstab
-c 取指定字符的補集
[root@lyp test]# tr -d -c ‘0-9’ < /etc/fstab
tr -d ‘0-9’ < ./fstab > ./fstab 是不會成功的
-s “s“ 對重復字符去重 -
HERE Document : <<
- cat << EOF
-
cat >> beijing.log << EOF
將標準的輸入(下面的字)重定向到beijing.log
cat >> shanghai.log << ‘EOF’
where are you from,I’m from $SH
EOF
加引號與不加引號的區別:
加引號(雙引號和單引號)輸入內容里面的變量是不會被替換;
不加引號的話 輸入的內容里面變量會被替換;
結束符不一定要使用EOF,可以使用其他任意字符。
寫一個腳本 腳本定義個配置文件,執行腳本的時候自動生成自定義的配置文件
#!/bin/bash
…
cat >> my.cnf << EOF 或者 ‘EOF’
a=b
b=c
echo $SHELL
EOF
…
管道
-
管道 :將一個命令的輸出結果(標準輸出|錯誤輸出)作為另外一個命令輸入,連接程序,實現將前一個命令的輸出直接定向后一個程序當作輸入數據流。
COMMAND1 | COMMAND2 | COMMAND3 | … -
tee 就類似于三通的管道 ,經常使用tee分向輸入 。
tee -a 對日志文件的追加操作
ls | tee -a baoding.log | tr ‘a-z’ ‘A-Z’ ;
生產中:日志輸出 | tee -a /tmp/logfile;
調試生產某個應用的時候,一方面我想要看標準輸入的日志,一方面想把日志保存到某個日志文件里便于日后的排查
原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/72304
主要寫了bash的一些基礎特性,主要包括重定向的使用,內容很豐富,排版也挺好的