1. 程式人生 > 其它 >Shell:Shell基礎

Shell:Shell基礎

Shell基礎

一、shell定義

shell是一個用 C 語言編寫的程式,它是使用者使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程式設計語言。

Shell 是指一種應用程式,這個應用程式提供了一個介面,使用者通過這個介面訪問作業系統核心的服務。

Shell屬於內建的指令碼,程式開發的效率非常高,依賴於功能強大的命令可以迅速地完成開發任務(批處理)語法簡單,程式碼寫起來比較輕鬆,簡單易學

二、shell的分類

cat /etc/shells

在linux中有很多型別的shell,不同的shell具備不同的功能,shell還決定了指令碼中函式的語法,Linux中預設的shell是/bin/bash),流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特點以及用途。

編寫規範:

#!/bin/bash                [指定告知系統當前這個指令碼要使用的shell直譯器]
Shell相關指令

檔案命名規範:

檔名.sh     .sh是linux下bash shell 的預設字尾

Bash 常用快捷鍵

輸入輸出重定向

linux 的標準輸入與輸出

輸入重定向

輸入重定向:是指不使用系統提供的標準輸入埠,而進行重新的指定。換言之,輸入重定向就是不使用標準輸入埠輸入檔案,而是使用指定的檔案作為標準輸入裝置。(重定向簡單理解就是使用 “<”符來修改標準輸入裝置)

輸出重定向

輸出重定向:(通俗的講,重定向輸出就是把要輸出的檔案資訊寫入到一個檔案中去,而不是將要輸出的檔案資訊輸出到控制檯(顯示屏),在linux中,預設的標準輸出裝置是控制檯(或稱為顯示器),使用者輸出的資訊預設情況下都會顯示到控制檯

 &表示全部檔案,檔案不管對錯,1表示標準輸出檔案,2表示標準錯誤輸出。

/dev/null 檔案

如果希望執行某個命令,但又不希望在螢幕上顯示輸出結果,那麼可以將輸出重定向到**/dev/null**中

[root@localhost ~]$  command > dev/null

多命令順序執行

shell指令碼的執行

[root@localhost ~]$ vim test.sh
#!/bin/bash
echo “hello world”

兩種方式執行shell指令碼

第一種:給檔案增加執行許可權

[root@localhost ~]$ chmod u+x test.sh
[root@localhost ~]$ ./test.sh #絕對路徑或相對路徑執行

第二種(瞭解):通過Bash呼叫執行指令碼

[root@localhost ~]$ bash test.sh

三、shell變數

1. 變數的命名規則:

在定義變數時,有一些規則需要遵守:

  • 命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭。
  • 等號左右兩側不能有空格,可以使用下劃線“_”,變數的值如果有空格,需要使用單引號或雙引號包括。如:“test=“hello world!””。其中雙引號括起來的內容“$”,“(”和反引號都擁有特殊含義,而單引號括起來的內容都是普通字元。
  • 不能使用標點符號,不能使用bash裡的關鍵字(可用help命令檢視保留關鍵字)。
  • 環境變數建議大寫,便於區分
  • 如果需要增加變數的值,那麼可以進行變數值的疊加。不過變數需要用雙引號包含"$變數名"或用${變數名}包含變數名。
[root@localhost ~]$ test=123
[root@localhost ~]$ test="$test"456
[root@localhost ~]$ echo $test
123456
#疊加變數test,變數值變成了123456
[root@localhost ~]$ test=${test}789
[root@localhost ~]$ echo $test
123456789
#再疊加變數test,變數值程式設計了123456789

關於單雙引號的問題:
雙引號能夠識別變數,雙引號能夠實現轉義(類似於“\*”)
單引號是不能識別變數,只會原樣輸出,單引號是不能轉義的

shell中特殊符號:

 單引號和雙引號

[root@localhost ~]$ name=sc
#定義變數name 的值是sc(就是最正直的人,超哥我了!)
[root@localhost ~]$ echo '$name'
$name
#如果輸出時使用單引號,則$name原封不動的輸出
[root@localhost ~]$ echo "$name"
sc
#如果輸出時使用雙引號,則會輸出變數name的值 sc

[root@localhost ~]$ echo `date`
2018年10月21日星期一18:16:33 CST
#反引號括起來的命令會正常執行
[root@localhost ~]$ echo '`date`'
`date`
#但是如果反引號命令被單引號括起來,那麼這個命令不會執行,―date`會被當成普通字元輸出
[root@localhost ~]$ echo "`date'"
2018年10月21日星期一18:14:21 CST
#如果是雙引號括起來,那麼這個命令又會正常執行

反引號

[root@localhost ~]$ echo ls
ls
#如果命令不用反引號包含,命令不會執行,而是直接輸出
[root@localhost ~]$ echo `ls`
anaconda-ks.cfginstall.loginstall.log.syslog sh test testfile
#只有用反引號包括命令,這個命令才會執行
[root@localhost ~]$ echo $(date)
2018年10月21日星期一18:25:09 CST
#使用$(命令)的方式也是可以的

2. 變數的分類:

  • 使用者自定義變數: 這種變數是最常見的變數,由使用者自由定義變數名和變數的值。
  • 環境變數: 這種變數中主要儲存的是和系統操作環境相關的資料,比如當前登入使用者,使用者的家目錄,命令的提示符等。不是太好理解吧,那麼大家還記得在Windows中,同一臺電腦可以有多個使用者登入,而且每個使用者都可以定義自己的桌面樣式和解析度,這些其實就是Windows的操作環境,可以當做是Windows的環境變數來理解。環境變數的變數名可以自由定義,但是一般對系統起作用的環境變數的變數名是系統預先設定好的。
  • 位置引數變數: 這種變數主要是用來向腳本當中傳遞引數或資料的,變數名不能自定義,變數作用是固定的。
  • 預定義變數: 是Bash中已經定義好的變數,變數名不能自定義,變數作用也是固定的。

2.1 使用者自定義變數:

2.1.1 變數定義