Shell 基礎
阿新 • • 發佈:2018-02-24
shellShell 介紹
各用戶都有自己配置別名的文件 /root/.bashrc
ls /etc/profile.d/
自定義的alias 放到 /root/.bashrc 還有 /etc/profile.d 下面
TAB補全
- shell是一個命令解析器,提供用戶和機器之間的交互
- 支持特點語法,比如邏輯判別,循環 if for
- 每個用戶都可以有自己特點的shell
- CentOS7 默認shell bash (Bourne Agin Shell)
-
還有zsh、ksh、等
歷史命令 history
history -c 清空內存中的記錄
echo $HISTSIZE 系統的history環境變量vi /etc/profile history 配置文件
HISTSIZE=100000 可以改大
source /etc/profile 立即生效
HISTTIMEFORMAT="%Y%m%d - %H:%M:%S"
如若使其永久生效必須寫進配置文件中 /etc/profile
和HISTSIZE 放一起
永久保存 chattr +a /.bash_history
如果不正常退出,歷史命令就會保存不完整
!! :重復上條命令
!n : 重復執行第n號條命令
!echo : 倒敘(從下往上)找第一個echo 的命令執行一遍
命令補全以及別名
tab
tab 鍵 補全 敲一下補全命令 敲兩下補全目錄以及其他命令
CentOS 6以前 不支持參數補全
CentOS 7以後都支持
安裝多一個包yum -y install bash-completion
alias 別名給命令重新起名字
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 基礎