1.什麼是shell?
shell是一個命令解釋器. 是介於操做系統內核與用戶之間的一個絕緣層。對於一個linux系統使用人員來講,shell是你駕馭類linux系統最基本的工具。全部的系統命令和工具再加上應用程序,對於shell腳原本說,都是可調用的。
shell扮演者操做系統內核和用戶的中間人的角色,用戶經過鍵入shell command,而後shell經過解析用戶輸入,而後將請求轉發給操做系統的內核進行處理。linux
1)一個系統能夠存在多個shell,能夠經過cat /etc/shells命令查看系統中安裝的shell,不一樣的shell可能支持的命令語法是不相同的。
2) 能夠經過echo $SHELL查看當前使用的shellshell
二、爲何使用shell編程?
沒有程序語言是完美的. 甚至沒有一個惟一最好的語言, 只有對於特定目的, 比較適合和不適合的程序語言。對於任何想適當精通一些系統管理知識的人來講,掌握shell腳本知識都是最基本的。玩轉linux,就得知道shell,shell命令是指揮linux的密碼。
咱們在linux系統上常常會遇到不少重複性的操做,並且手動操做的話,效率低,容易出錯,浪費咱們大量時間。這個時候不妨考慮使用shell腳本,
讓腳本把咱們從繁雜的工做中解脫出來,留下更多的時間享受生活,豈不很好。編程
小知識:
1)查詢linux版本的命令 lsb_release -a
allen@allen-K42JE:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04 LTS
Release: 14.04
Codename: trustyubuntu
2)查詢bash版本的命令 echo $BASH_VERSION
allen@allen-K42JE:~$ echo $BASH_VERSION
4.3.8(1)-releasevim
三、shell命令是如何分層的?
shell命令分爲如下五種:
• Alias(別名)
• Function(函數)
• Shell built in(內部命令)
• Keyword(關鍵字)
• File
能夠用type查詢shell命令的類型
type ls quote pwd do idbash
四、shell的編輯器
建議使用vim,做爲linux的使用者,使用vim編輯器是必須的事情。
我使用的ubuntu系統(其它系統可能不同),配置vim文件vimrc
sudo vi /etc/vim/vimrc編輯器
詳細配置以下:
• showmode: Ensures we see when we are in insert mode
• nohlsearch: Does not highlight the words that we have searched for
• autoindent: We indent our code often; this allows us to return to the last
indent level rather than the start of a new line on each carriage return
• tabstop=4: Sets a tab to be four spaces
• expandtab: Converts tabs to spaces, which is useful when the file moves to
other systems
• syntax on: Note that this does not use the set command and is used to turn
on syntax highlighting
When these options are set, the $HOME/.vimrc file should look similar to this:
set showmode nohlsearch
set autoindent tabstop=4
set expandtab
syntax on
五、建立一個hello world的shell程序。
1) vi $HOME/bin/hello1.sh,加入下面語句
#!/bin/bash
echo "Hello world."
exit 0
2)chmod +x $HOME/bin/hello1.sh,添加可執行權限
3) hello1.sh,執行程序
六、Checking the exit status
shell有一個專門的變量能夠查詢上一條shell命令的返回值
hello1.sh
echo $?
咱們會看到輸出0.
七、shell的變量簡介
你們都知道,編程會用到變量,這裏必須說一下shell的變量,按使用目的分三種類型:
1)環境變量:BASH,PWD,SHELL,USER等(能夠用set命令查詢)
2)系統預置變量:
Bash定義了9個位置變量,分別是$一、$二、$三、$4…$9.腳本編寫者在腳本中引用這9個變量,獲取傳遞給腳本的參數。
$0:保存當前進程或腳本的名稱。
$*或$@:保存傳遞給腳本或進程的全部參數。
$$:當前進程或腳本的PID。
$!:後臺運行的最後一個進程的PID號。
$?:用於返回上一條命令是否執行成功。若是成功執行,將返回數字0,不然返回非零數字(一般狀況下都返回數字1)。
$#:用於保存腳本的參數個數。
3)用戶自定義變量
【自定義變量的命名規則】
因爲變量沒有具體的數據類型,所以在定義變量時能夠沒必要定義其類型,直接賦值便可使用。
在Shell中變量名稱能夠由大寫字母、小寫字母、下劃線、數字等符號組成。
定義變量時,建議使用大寫字母、下劃線和數字組成變量名,以避免引發沒必要要的誤解。
變量對大小寫敏感。函數
【變量的做用域】
變量的做用域是指變量的引用範圍,也能夠理解爲變量在哪一個區域起做用。Bash中的變量做用域規則能夠概括爲如下兩點:
除非使用了export命令,不然在腳本中定義的變量(包括函數中定義的變量)的做用域是整個腳本。
使用export定義的變量都是全局變量。全局變量能夠在當前用戶的任何腳本、命令中引用。
從以上兩點能夠看出,若是用戶須要在腳本中定義全局變量,必須使用export命令。工具