簡介
學習Shell腳本之前,我們有必要先來認識認識什麼叫Shell?談到這個問題,我們首先來回憶一下計算機自底向上的體系,最下層是硬件,上面是驅動,上面是操作系統,再上面是Shell,即所謂的外殼。
Shell其實是用戶和操作系統進行人機互動的一個interface。主要通過命令行來使系統完成某種工作,因此Shell最簡單的定義爲—命令解釋器:可以把用戶的信息傳遞給操作系統,也可以把操作系統的處理結果翻譯給用戶。
最常用的Shell:sh 、csh、bash等等。
腳本註釋
在shell中使用 # 在行首進行註釋;
注意: sh裏面沒有多行註釋,只能每一行加一個 # 號;
腳本解釋器
Shell是一種腳本語言,那麼,就必須有解釋器來執行這些腳本,常見的腳本解釋器有:
bash:是Linux標準默認的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的縮寫,內部命令一共有40個。
sh: 由Steve Bourne開發,是Bourne Shell的縮寫,sh 是Unix 標準默認的shell。
另外還有:ash、 csh、 ksh等。
#!usr/bin/bash
# shell腳本開頭 通常會以 #! 開頭
# 這個是一個標識符,表示在沒有指定執行器時默認的執行器。
也可以是如下
#!/usr/bin/env bash
甚至指定python作爲解釋器(運行python腳本)
#!/aaa/bbb/python
腳本執行
執行之前用命令 chmod +x 來修改腳本文件的權限,使其有可執行權限。
chmod a+x demo.sh
四種執行腳本的區別
- 在子shell中執行,需要執行權限
./demo.sh
- 在子shell中執行,不需要執行權限
bash demo.sh
- 在當前shell中執行,不需要執行權限
.demo.sh
- 在當前shell中執行,不需要執行權限
source demo.sh
第3和第4種方式是一樣效果。
提示:通常修改系統配置文件中如/etc/profile的PATH等變量後,使之在當前shell中生效。
腳本調試
sh -n demo.sh 僅調試syntax error
sh -vx demo.sh 以調試的方式執行,可以查看執行的過程
基本符號和命令含義
1.‘ ’ 單引號,和C語言中的“”一樣, 是字符串的限定符,保持裏面的字面值,不作出解釋,請看2示例
2." " 雙引號,對括號內的內容進行解析,如下解析變量
[root@centosNode6 ~]# var1=aaa
[root@centosNode6 ~]# echo '$var1'
$var1
[root@centosNode6 ~]# echo "$var1"
aaa
3.``反引號,在Esc鍵下面,執行並引用一個命令,即會解析引號內的命令
[root@centosNode6 ~]# echo echo hello
echo hello
[root@centosNode6 ~]# echo 'echo hello'
echo hello
[root@centosNode6 ~]# echo "echo hello"
echo hello
[root@centosNode6 ~]# echo `echo hello`
hello
4.| 豎線,即管道符,將前面命令處理得到的結果給管道後面進行處理
[root@centosNode6 ~]# echo "www.baidu.com"|awk -F. '{print $1}'
www
[root@centosNode6 ~]# echo "www.baidu.com"|awk -F. '{print $2}'
baidu
5.\ 斜槓,轉義字符,可以對符號進行轉義,取它的字面意思,去掉特殊含義
[root@centosNode6 ~]# echo ""hello""
hello
[root@centosNode6 ~]# echo "\"hello\""
"hello"
6.echo 打印輸出
[root@centosNode6 ~]# echo hello
hello
[root@centosNode6 ~]# echo 'hello'
hello
[root@centosNode6 ~]# echo "hello"
hello
7.$? 上一條命令執行是否成功的結果,0 爲成功,其他非 0 均爲失敗,該命令很重要,經常用到。如下,
[root@centosNode6 ~]# ping -c1 www.baidu.com &>/dev/null
[root@centosNode6 ~]# echo $?
0
[root@centosNode6 ~]# ping -c1 www.baid.om &>/dev/null
[root@centosNode6 ~]# echo $?
2
如果覺得有幫助,請點個贊哦***^ _^***