1. 程式人生 > >Shell 基礎

Shell 基礎

shell

Shell 介紹

TAB補全

  1. shell是一個命令解析器,提供用戶和機器之間的交互
  2. 支持特點語法,比如邏輯判別,循環 if for
  3. 每個用戶都可以有自己特點的shell
  4. CentOS7 默認shell bash (Bourne Agin Shell)
  5. 還有zsh、ksh、等

    歷史命令 history

    history -c 清空內存中的記錄
    echo $HISTSIZE 系統的history環境變量

    vi /etc/profile history 配置文件
    HISTSIZE=100000 可以改大
    source /etc/profile 立即生效
    HISTTIMEFORMAT="%Y%m%d - %H:%M:%S"

    修改history格式 年月日 時分秒

如若使其永久生效必須寫進配置文件中 /etc/profile
和HISTSIZE 放一起

永久保存 chattr +a  /.bash_history

如果不正常退出,歷史命令就會保存不完整

!! :重復上條命令
!n : 重復執行第n號條命令
!echo : 倒敘(從下往上)找第一個echo 的命令執行一遍

命令補全以及別名

tab

tab 鍵 補全 敲一下補全命令  敲兩下補全目錄以及其他命令

CentOS 6以前 不支持參數補全
CentOS 7以後都支持
安裝多一個包yum -y install bash-completion
alias 別名給命令重新起名字

各用戶都有自己配置別名的文件 /root/.bashrc
ls /etc/profile.d/
自定義的alias 放到 /root/.bashrc 還有 /etc/profile.d 下面

通配符。

元字符

`*`      前一個字符匹配0次到任意多次(星號前一個字符不起作用)

?      表示一個任意的字符

{ }     表示範圍內的 或的關系

.       匹配除了換行符外任意一個字符

^      匹配行首

$      匹配行尾

 [ ]     匹配中括號指定的任意一個字符,只匹配一個字符
     列如[0-9]匹配任意一位數字,[a-z][0-9]匹配小寫字母和一位數字構成的兩位字符

[^]     匹配除了中括號的字符以外的任意一個字符。取非的結果
       列如[^0-9]匹配任意一位非數字字符。

\        轉義符,用於取消特殊符號的含義

\{n\}   表示前面的字符恰好出現n次。
       列如:[0-9]\{4\} 匹配4位數字。
               [1][3-8][0-9]\{9\}匹配手機號碼

\{n,\}    表示前面的字符出現不小於n 次。
         列如[0-9]\{2,\} 表示兩位及以上的數字

\{n,m\}  表示前面的字符出現至少n次,最多m次。
         列如 :[a-z]\{6,8\}匹配6-8位的小寫字母         

輸入輸出重定向

 ">"  把正確輸出的結果 重定向 到定義的文件中   以覆蓋的方式
 ">>"  把輸正確出的結果 重定向  到定義的文件中   尾部追加
 "2>"  把命令產生的錯誤信息 輸出到文件中去     以覆蓋的方式
 "2>>"   把命令產生的錯誤信息 輸出到文件中去   追加重定向
"2>&1"  把正確和錯誤的信息都追加到文件裏去

"<" 輸入重定向
wc -l < 1.txt  將文件計數

管道符 " | "

把前面命令的結果傳給後面的命令執行

;  :   命令1;命令2   多個命令順序執行,命令之間沒有任何的邏輯關系

&&  :   命令1 &&命令2   邏輯與  

 ||  :  命令1 || 命令2    邏輯或

*   ls  &&  echo yes ||  echo on 

作業控制

ctrl + z    停止信號放入後臺
jobs    列出停止的任務 
fg  +工作號    將任務放前臺   
bg +工作號    將任務放後臺
sleep    休眠 命令
&     放入後臺運行

nohup

nohup  用途:不掛斷地運行命令。  
語法:nohup Command `[ Arg … ] [ & ]`    
無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。    
如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。    
如果沒有文件能創建或打開以用於追加,那麽 Command 參數指定的命令不可調用。  
退出狀態:該命令返回下列出口值:
126 可以查找但不能調用 Command 參數指定的命令。?     
127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。
    否則,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。

變量

PATH  、HOME 、PWD、 LOGNAMNE
系統變量 一般都是大寫字母

env 查看環境變量命令

set 查看系統所有變量命令 多了很多變量,並且包括用戶自定義的變量

set -u :調用未聲明變量是會報錯

unset 刪除變量

環境變量:全局變量
用戶自定義變量: 局部變量、本地變量
自定義變量 a=1
變量名規則:可以是字母、數字下劃線,首位不能為數字
變量值有特殊符號時需要用單引號括起來 單引號 ‘ 中間不識別變量’  雙引號“中間可識別變量”

echo $SSH_TTY   顯示自己所在的終端、
pstree 進程樹

變量的累加

全局變量
export b=2    export 定義全局變量 向下的全局變量

環境變量
環境變量配置文件
系統級別的
    /etc/profile  用戶環境變量,交互,登錄才執行
    /etc/bashrc  用戶不用登錄,執行shell就生效

 /etc目錄下的文件,會對所有用戶起作用,對登錄起 
/etc/.bashrc                        
/etc/profile                      
/etc/.bash_profile.d/*.sh   

 家目錄文件下,只會對當前用戶起作用
/root/.bash_profile    
/root/.bashrc               

/root/.bash_history
/root/.bash_logout   用戶退出做的操作

~ 表示用戶家目錄

PS1=`‘\[\033[01;32m\][\u@\h\[\033[00m\]\[\033[01;36m\] \W\[\033[01;00m\]]\$‘
source  <=>.`

特殊符號

`*`     任意個任意字符
?    任意一個字符
`#`    註釋字符
\    脫義字符
|    管道符

cut、sort、uniq、wc

cut     分割 
  -d 分隔符 
  -f  指定斷號 
  -c 指定第幾個字符

sort    排序 
  -n  以數字排序 (字母和符號默認為0)
        -r  反排序
        -t   分割符
        -kn1/-kn1,n2

wc  
    -l   統計 行數
  -m  統計字符數
  -w  統計詞 以空格為分隔符

cat  -A  查看所有包括隱藏符

uniq 去重復  (先排序再去重復)
 -c  統計重復行數

tee 和 > 類似 , 重定向的同時還在屏幕顯示
tee -a 追加    相當於 ‘>>‘

tr 替換字符 (針對字符操作)
   tr‘a‘ ‘b‘,大小寫替換tr ‘[a-z]‘ ‘[A-Z]‘

split   切割
    -b 大小(默認單位字節)  
            -l 行數

特殊符號

1. $ 變量前綴  !$組合   正則裏面表示行尾

2. ; 多條命令寫到一行去,用分號分割

3. ~用戶家目錄,後面正則表達式表示匹配符

4. &放到命令後面,會把命令放置後臺

5. `>` , >> , (正確重定向)2> , 2>>(錯誤重定向) , &> 正確錯誤重定向

6. [ ] 指定字符中的一個,[0-9],[a-zA-Z],[abc]

7. || 和 && 與或 邏輯關系,用於命令之間

條件判斷、邏輯關系表達

兩個整數比較

-eq   ->     ‘=‘      等於
-ne   ->     ‘≠‘      不等於
-gt    ->     ‘>‘      大於
-lt     ->     ‘<‘      小於
-ge   ->     ‘≥‘     大於等於
-le    ->     ‘≤‘     小於等於

字符串判斷

-z    字符串      ->     是否為空
-n    字符串      ->     是否為非空
字符串 == 字符串  ->  字符串是否相同,相等
字符串 !=字符串  ->  字符串是否不相等

多重條件判斷

條件1  -a   條件2   ->   相與,都成立則為0
條件1  -o   條件2   ->   香或,有一個成立則為0
!  條件                  ->    非,與原來相反

if [ ] 條件判斷式

-r   file      用戶可讀為真
-w   file       用戶可寫為真
-x   file     用戶可執行為真
-f   file      文件為正規文件為真
-d   file     文件為目錄為真
-c   file     文件為字符特殊文件為真
-b   file     文件為塊特殊文件為真
-s   file     文件大小非0時為真
-t   file      當文件描述符(默認為1)指定的設備為終端時為真

兩個文件之間比較

文件1  -nt   文件2 

判斷文件1的修改時間是否比文件2的 新 (如果新,則為真。修改時間)

文件1   -ot   文件2

判斷文件1的修改時間是否比文件2的 舊 (如果舊,則為真。修改時間)

文件1   -ef   文件2 

判斷文件1是否和文件2的 iNode號一致,可以理解為兩個文件是否為同一文件。
(這個判斷作用於判斷硬鏈接是很好的方法)

Shell 基礎