1、Shell特性
命令歷史 history !! !$ !n !字符
Tab鍵可以補全文件路徑或者命令
alias a="b" unalias a
通配符 *匹配零個或多個字符 ?匹配一個字符
輸入輸出重定向>,>>,<,2>,2>>
管道符
作業控制 ctrl+z jobs fg bg
2、變量
系統變量名都是大寫,echo可以查看變量名
env 可以列出當前用戶的所有環境變量以及用戶自定義全局變量
set 命令可以把所有變量列出來包括系統的和自定義的全局變量以及當前shell自定義變量
linux下設置自定義變量規則:(1)格式爲“a=b”,其中a爲變量名,b爲變量的內容,等號兩邊不能有空格;(2)變量名只能由英、數字以及下劃線組成,而且不能數字開頭;(3)當變量內容帶有特殊字符(如空格)時,需要加上單引號;(4)如果變量內容中需要用到其他命令運行結果則可以使用反引號;(5)變量內容可以累加其他變量的內容,需要加雙引號。
系統所有用戶使用變量:export myname=Aming 全局變量,加入/etc/profile並source /etc/profile永 久生效
系統某個用戶使用變量:export myname=Aming加入當前用戶家目錄下的.bashrc中並source .bashrc
export myname=Aming 全局變量,export不加任何選項表示,聲明所有的環境變量以及用戶自定義變量
用戶自定義變量,可以使用unset 變量名 進行解除變量設置
3、系統和個人環境變量的配置文件
/etc/profile PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE,umask等
/etc/bashrc $PS1 umask 以後如果設置umask修改/etc/profile,不要改這個文件
.bash_profile 用戶自己的環境變量
.bashrc 當用戶登錄時以及每次打開新的shell時,執行該文件
.bashrc_history 記錄命令歷史用的
.bash_logout 當退出shell時,會執行該文件
4、shell中的特殊符號
* 匹配符號,0個或多個任意字符
?匹配字符,1個任意的字符
# 註釋說明用的,使後面的內容失去原本的意義
\ 脫義字符,將特殊字符還原爲普通字符
| 將符號前面命令的結果丟給符號後面的命令,一般針對文檔操作的命令比較常用,如cat,less,head
cut,sort,wc,uniq,tee,tr,split,sed,awk等等
$ 引用變量,還有!$
; 分號,多條命令寫一行時,分隔命令
~ 用戶家目錄
& 放到命令最後面,讓命令在後臺運行
>,>>,2>,2>> [錯誤]重定向,追加[錯誤]重定向
[]中括號,中間爲字符組合,代表中間字符中的任意一個 ls 1[23a].txt
5、常用命令:
1)cut
語法:cut -d '分隔字符' [-cf] n 這裏的n是正整數
-d 後面指定分隔符,用單引號括起來,-f指定第幾段 cut -d ':' -f 1 /etc/passwd |head -n 5
-c 後面只有一個數字表示截取第幾個字符 head -n2 /etc/passwd|cut -c2
-c 後面跟一個數字區域,表示截取從幾到幾 head -n2 /etc/passwd|cut -c2-5
2)sort
語法:sort [-t 分隔符] [-kn1,n2] [-nru] (n1<n2)
不加選項,從首字符向後,一次按ASCII碼值進行升序sort /etc/passwd
-t 後指定分隔符,-kn1,n2表示在指定的區間中排序,-k後面只跟一個數字表示對第N個字符排序,-n表示使用純數字排序 sort -t: -k3 -n /etc/passwd
-r表示以降序的形式排序 sort -t: -k3,5 -r /etc/passwd
-u去重 cut -d: -f4 /etc/passwd |sort -n -u
3)wc
用於統計文檔的行數、字符數、詞數
不加任何選項,會顯示行數、詞數以及字符數
-l 統計行數 -m 統計字符數 -w統計詞數
4)uniq
uniq去重複,最常用就一個-c用來統計重複的行數,去重前要先排序sort testb.txt|uniq -c
5)tee
後跟文件名,類似於>,比重定向多一個功能,在把文件寫入後面所跟的文件中的同時,還顯示在屏幕
6)tr用來替換字符
最常用的就是大小寫轉換 head -n2 /etc/passwd |tr '[a-z]''[A-Z]'
tr也可以替換一個字符 grep 'root' /etc/passwd |tr 'r''R'
7)split切割大文件
-b 按大小來分割單位爲byte split -b50 1.txt
默認會以xaa,xab,...這樣的形式定義分隔後的文件名,也可以指定文件名split -b50 1.txt 123
-l 按行數分隔,split -110 file
6 &&和||
command1;command2前面命令是否執行完成都會執行後面的命令
command1&&command2只有前面命令執行成功纔會執行後面命令
command1||command2只有前面命令不成功再去執行後面命令