shell腳本學習筆記--基礎(1)

簡介

學習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

四種執行腳本的區別

  1. 在子shell中執行,需要執行權限
./demo.sh
  1. 在子shell中執行,不需要執行權限
bash demo.sh
  1. 在當前shell中執行,不需要執行權限
.demo.sh
  1. 在當前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

如果覺得有幫助,請點個贊哦***^ _^***

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章