shell變量,環境變量配置文件,shell特殊符號cut命令,sort_wc_uniq命令,tee_tr_split命令,shell特殊符號

shell變量

  • 使用 env 命令能夠查看系統變量的信息
  • 下面大寫字母的變量名稱就是系統的變量
  • 變量的值多是 數字 也多是 字符串
  • env 能夠查看系統經常使用的環境變量

  • 除了系統的環境變量外,用戶還能夠自定義一些變量
  • a = 111 表示爲變量a賦值111,這樣就自定義了一個變量 a
  • echo $a 能夠把 a 的值顯示出來
  • set 命令能夠查看系統內全部的變量,env只能查看系統內置的變量
  • set |grep 111 就能夠在系統全部變量裏面篩選出跟111有關的信息
  • 能夠看到,a=111 的信息被查出來了
  • 也可使用 set |less ,也就是用less來查看set出來的變量信息
  • 自定義變量只有set才能看到

  • 自定義變量規則,變量名稱可使用 字母,數字,下劃線,首字符不能是數字
  • 變量的值若是含有特殊符號,須要用單引號括起來
  • 如圖,給變量 a 賦值 as$g ,這個值裏面含有 $ 符號,這就是特殊符號
  • 若是不用單引號括起來,會不生效
  • 若是變量值含有特殊符號如 $ ,空格 之類的就須要單引號括起來

  • 上圖,定義了變量 a=1 b=2
  • echo $a$b 就是按照命令順序同時顯示a與b的值
  • 結果就是 12
  • 上圖定義了變量 c ,值爲 "a$bc"
  • 這裏由於值裏面有特殊符號 $ ,因此想生效要用單引號括起來
  • 可是這裏使用了雙引號,因此 $ 和 $後面的 bc 是不生效的
  • 因此實際賦予 c 的值只有 a

  • 如圖,對 c 從新賦值 "a$b"c
  • 這裏仍是使用了雙引號,$b 會被當作命令來處理
  • $b 就是 b 的值的意思
  • 這裏首先 a會賦值給c,而後$b也就是b的值爲2也會賦值給c
  • 最後是 c 會賦值給 c
  • 因此 c 的值就是 a2c

  • 因此若是想要多個變量一塊兒賦值的話能夠這樣寫
  • c="$a""$b" ,就是使用雙引號單獨把變量括起來
  • 若是使用單引號 '$a' ,那麼就會被識別爲字符串而不是命令
  • 用雙引號的話就能夠被識別爲命令
  • 因此想使用變量的話,能夠單獨用雙引號把變量括起來

  • 使用 w 查看用戶信息
  • 看到有3個用戶鏈接
  • 使用 echo $SSH_TTY 能夠知道當前用戶是哪個
  • 下面的值是 /dev/pts/1 也就是 pts/1 就是當前用戶

  • 使用命令 yum install -y psmisc 安裝 psmisc 包
  • 安裝完成後,就可使用 pstree 命令
  • 如圖,能夠查看當前所在的 bash
  • 由於使用了兩個虛擬終端進行鏈接,能夠看到有兩條bash
  • 使用 bash 命令能夠在當前shell下面再生成一個shell
  • 如圖,能夠看到,在第一個bash後面又多了一層bash,這就是新生成的
  • 使用 pstree 命令就能夠看到本身在哪一層 bash 下面

  • 局部變量只能在當前的 bash 下面使用
  • 若是像上面同樣,生成多層的 bash
  • 其它層的 bash 是沒法使用當前bash定義的局部變量的
  • 若是但願全部層均可以使用一個變量
  • 就須要把這個變量定義爲 全局變量
  • 如圖,使用 export 就能夠把 b 定義爲全局變量
  • 可是全局變量只對 子bash 有效,也就是向下有效
  • 在一個 bash 裏面定義一個全局變量,這個bash下面不管多少層bash,都是有效的
  • 可是若是這個bash上面還有bash,也就是 父bash,是無效的
  • 全局變量對上層是無效的,只對下層有效

  • 如圖,這裏是兩條並列的sshd
  • 若是在第一個sshd後面的bash裏面定義一個全局變量
  • 對第二個sshd裏面的bash是無效的
  • 兩個 sshd 之間是不交互的
  • 全局變量只在同一條sshd裏面是有效的
  • 若是要退出一層bash,可使用命令 exit
  • 這樣就能夠退到上一層的bash裏面
  • 若是已是最後一層,那麼就會之間退出登陸狀態

  • 設置了一個變量,若是不想要了,想取消掉
  • 可使用 unset + 變量名 就能夠把變量取消掉
  • unset aming 就把變量 aming 取消掉了

環境變量配置文件

  • 能夠分兩個層次看以上文件,etc下面的是系統層次文件
  • ~/ 下面的是用戶層次的文件
  • 通常不修改etc下面這兩個配置文件
  • 若是有須要修改配置文件,能夠編輯用戶家目錄下面的配置文件,也就是~/下面的
  • 如 .bash_profile
  • 修改完配置文件後須要從新加載纔會生效,可使用 source + 配置文件名稱 從新加載
  • 也可使用 . 代替 source
  • 如圖, . .bash_profile == source .bash_profile
  • bashrc 幾乎全部配置文件都會調用這個配置文件
  • 無論登不登陸,bashrc 都會被調用
  • 用戶登陸時雖然調用profile,但實際上profile裏面仍是會調用bashrc
  • 家目錄下的配置文件調用的時候也會調用bashrc
  • .bash_logout 配置文件能夠配置退出登陸的時候執行的命令

  • 有一個系統變量叫作 PS1
  • 這個變量存在於 /etc/bashrc 文件裏面,能夠用vim打開使用搜索 /PS1 找到
  • 也可使用 echo $PS1 顯示出這個變量的值
  • 如圖,變量值是 [\u@\h \w]$
  • 其中, \u 是當前用戶名 , \h 是hostname
  • \W 是當前目錄名稱,$ 就是#的位置
  • PS1的值是能夠修改的
  • 如圖,PS1的值修改成 '<\u@\h \w> $'
  • 小寫 w 會顯示絕對路徑
  • 賦值的時候,由於含有特殊符號 @,$等,因此要用單引號括起來
  • 符號 $ 在root用戶會顯示爲#號,普通用戶就顯示爲$號
  • 如圖,PS1還能夠設置顏色
  • 執行shell腳本會使用 PS2 來顯示

shell特殊符_cut命令

  • 星號 * 能夠表示 任意個任意字符
  • 問號 ? 只表示一個字符,能夠是任意字符,*是多個
  • 井號 # 表明註釋,一行前面寫#,這一行就會被系統忽略掉,不會執行
  • 脫義字符能夠把系統裏面的特殊符號顯示爲字符串
  • 例子,a=1, b=$a 這就把 a 的值賦給了 b
  • 若是使用脫義符, b=$a ,那麼 b 的值就變成了 $a
  • 也就是說把原本不能識別爲字符的 $ 變成了字符

  • 管道符 | 配合 cut 命令使用,cut能夠截取字符串
  • 第一段是顯示 passwd 的頭兩行
  • cat /etc/passwd |head -2 |cut -d ":" -f 1
  • 首先cat命令的結果傳給了head命令
  • head命令的結果又傳給cut命令
  • cut 命令裏面,-d參數表明分隔符,這裏設置爲 ":"
  • 表明使用 : 對head命令的結果進行分隔
  • 參數 -f 表明段號,1就是取第一段數據
  • 1,2 表明第一第二段數據
  • 1-3 表明1到3段數據
  • 還有一個參數 -c 能夠直接指定截取某個位置的字符
  • 例如 cut -c 4 就表示截取第4個字符

sort_wc_uniq命令

  • sort 命令能夠對數據進行排序
  • 排序順序是按照字符編碼裏面的id大小來排序的
  • 如圖,passwd 裏面的數據按照 a-z 的順序進行了排序顯示
  • sort -n ,參數 -n 可使內容按照數字來排序
  • 字母跟特殊字符所有算做 0 ,
  • 因此首字符不是數字的數據行會出如今最前面
  • 其它的數據按照數字大小來排序
  • sort -nr 參數 -r 能夠倒序排序

  • wc -l 能夠統計文件數據的行數
  • wc -m 能夠統計文件的字符數
  • 參數 -m 會把換行符,空格等特殊字符的數量也統計在內
  • wc -w 能夠統計文件的詞數
  • 詞數是按照空白字符來分隔的,好比換行符,空格之類的

  • uniq 命令能夠把數據內重複的數據去掉
  • 好比1.txt裏面有數據 1 ,1 ,2 ,3
  • 使用 uniq 1.txt 就能夠把重複的1去掉,只留下一個1
  • 可是uniq有一個問題,就是隻能去除連續的重複數據
  • 好比數據有 1,2,1,3 ,這裏uniq就不能把1去掉
  • 由於這兩個1不是連續的,中間有2隔着,這樣uniq就沒法去重
  • 因此通常使用uniq都須要先sort排序一下
  • 這樣就可使重複的數據連續的排列,這樣uniq就能夠生效了
  • 如圖,先sort而後經過管道符|傳給uniq命令
  • 參數 -c 能夠統計重複的個數
  • 圖中,1 的左邊是 2 ,表示1這個數據總共存在兩個相同的數據
  • 左邊是1的數據,表示這個數據只有一個,沒有重複的

tee_tr_split命令

  • 第一行 >a.txt 就能夠把空字符重定向到a.txt裏面,這樣就清空了a.txt
  • cat a.txt 什麼都沒顯示
  • 第三行,sort 而後 uniq ,而後 tee a.txt
  • 意思是把前面的結果重定向到 a.txt 並把重定向的內容顯示在下面
  • tee 命令就是能夠在重定向的同時,把內容顯示在下面
  • tee 命令還有一個參數 -a
  • sort2.txt |uniq -c |tee -a a.txt
  • 能夠把前面的結果追加到 a.txt 裏面
  • tee命令原本是重定向並顯示結果,a參數能夠把重定向變爲追加
  • 而後把追加的內容顯示在下面

  • tr 命令能夠替換字符
  • 如圖,echo "aminglinux" |tr '[al]' '[AL]'
  • 這樣就能夠把a與l變成大寫
  • 第二行就是單個字符替換
  • 第三行能夠把全部字母換成大寫
  • 最後一行把全部字母替換成 1

  • spilt是用來切割文件的,把大文件切割成小文件
  • 有兩種用法,一種是按大小切割,一種是按數據的行數切割
  • 如圖 split -b 100M bigfile 就是按大小切割
  • 按照每一份 100MB 的大小來切割文件
  • 參數 -b 就是指定按大小切割的選項
  • 100M 也能夠不寫單位,不過這樣的話,默認單位就是比特
  • 不寫單位會按照默認單位比特來切割
  • 參數 -l 就是指定切割方式按行來切割
  • 1000 就表示每1000行數據切割成一份
  • 默認的切割後的文件名都以 x 開頭
  • 命令還能夠設置自定義文件名前綴
  • 如圖,後面加上 abc
  • 下面查看切割後的文件,能夠看到
  • 下面3個文件都是以abc開頭

shell特殊符號下

  • 如上圖,同一行寫多條命令的時候,使用分號 ; 來分隔
  • 分號分隔以後,系統就能夠識別這是兩條命令
  • 若是不分隔系統會覺得是一條命令
  • ||表明或者,&&表明與
  • 使用 || 的時候,若是前面執行結果爲true,後面就不執行了
  • 若是前面爲 false 後面會繼續執行
  • 使用 && 的時候,若是前面執行結果爲false,後面就不執行了
  • 若是前面爲 true 後面纔會繼續執行
  • 符號 || 和 && 是在命令之間使用的
相關文章
相關標籤/搜索