shell通常表明兩個層面的意思,一個是命令解釋器,好比BASH,另一個就是shell腳本。本節咱們站在命令解釋器的角度來闡述shell。nginx
命令的優先級:shell
命令分爲:瀏覽器
==> alias #別名
==> Compound Commands #指的是 if while for
==> function #函數
==> build_in #內置命令
==> hash
==> $PATH #環境變量
==> error: command not found緩存
man builtin 查看內置命令bash
function test () {read -p 'please input your hostname:' name;hostnamectl set-hostname $name;hostname} #將這個語句打印出來,將輸入的值賦值給name函數
hash -r 清除hash命令ui
hash 緩存經常使用的命令路徑spa
unalias test = ‘ls -l’建立別名firefox
unalias test 去除別名 3d
set 查看定了哪些義的函數
bash中的特殊字符,鍵盤上能敲出來的特殊字符都有其特殊意義,強調一點:元字符是被shell解釋的
~ 家目錄 cd ~ 返回家目錄
`` 命令替換 取命令的執行結果
[root@MiWiFi-R3-srv ~]# ls
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz
[root@MiWiFi-R3-srv ~]# res=`ls` #取命令的運行結果,賦值給變量res res=$(ls)命令同樣,之後用這個,``這個嵌套會出錯
[root@MiWiFi-R3-srv ~]# echo $res #查看變量res的值
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz
! 取非 同^
!666 執行歷史命令
# 註釋
$
echo $? 判斷上一條命令執行是否成功 0 爲成功
echo $[1+10] 求和
% 殺後臺進程 jobs號; 取模
&後臺執行
firefox & 後臺運行火狐瀏覽器
&&與運算
||或
* 匹配任意長度字符串;計算乘法
() 在子進程中執行
[root@MiWiFi-R3-srv ~]# x=1
[root@MiWiFi-R3-srv ~]# (x=666)
[root@MiWiFi-R3-srv ~]# echo $x
1
[root@MiWiFi-R3-srv ~]#
[root@MiWiFi-R3-srv ~]# (x=666;echo $x)
666
- 減號;區間;cd -;
_ 無特殊含義
= 賦值 == 判斷
[] 字符通配,匹配括號內之一
x=1
y=2
[ &y >&x ] 作邏輯判斷
echo $?
money = 10
echo $money000 拼接,結果爲10000
{}
{ ls; cd /; } 命令列表括號內的開頭和結尾必須是空格
touch {1..10}.txt 一次建10個文件
[root@MiWiFi-R3-srv test]# touch {1..3}{a..d}.txt
[root@MiWiFi-R3-srv test]# ls
1a.txt 1b.txt 1c.txt 1d.txt 2a.txt 2b.txt 2c.txt 2d.txt 3a.txt 3b.txt 3c.txt 3d.txt
[]列表
ls [a-Z].txt 篩選第一個字符是字母的文件
\ 轉義
"" 軟引 ''硬引 #軟引用沒有特殊意義
[root@MiWiFi-R3-srv test]# x=1
[root@MiWiFi-R3-srv test]# echo "$x" #雙引號的表明軟引用,引號內特殊字符有特殊意義,好比$,``等 1
[root@MiWiFi-R3-srv test]# echo '$x' #單引號表明硬引用,引號內全部字符都無特殊意義 $x
; 能夠接多個命令:ls;pwd;echo 123;不管對錯,會一直執行到最後一條命令
/ 目錄分隔符
? 單個字符
> 輸出重定向
>> 追加