Shell入門(一)
目錄
Shell
Shell 是一個用 C 語言編寫的程式,它是使用者使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程式設計語言。
Shell 是指一種應用程式,這個應用程式提供了一個介面,使用者通過這個介面訪問作業系統核心的服務。
Ken Thompson 的 sh 是第一種 Unix Shell,Windows Explorer 是一個典型的圖形介面 Shell
Shell 指令碼
Shell 指令碼(shell script),是一種為 shell 編寫的指令碼程式。
業界所說的 shell 通常都是指 shell 指令碼,注意:shell 和 shell script 是兩個不同的概念。
由於習慣的原因, "shell程式設計" 都是指 shell 指令碼程式設計,不是指開發 shell 自身
Shell 環境
Shell 程式設計跟 java、php 程式設計一樣,只要有一個能編寫程式碼的文字編輯器和一個能解釋執行的指令碼直譯器就可以了。
Linux 的 Shell 種類眾多,常見的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- ……
- Bash,也就是 Bourne Again Shell,由於易用和免費,Bash 在日常工作中被廣泛使用。同時,Bash 也是大多數Linux 系統預設的 Shell。
#! 的作用:告訴系統其後路徑所指定的程式即是解釋此指令碼檔案的 Shell 程式。
先新建一個test.sh檔案
#!/bin/bash
vi test.sh
進入了編輯器
#!/bin/bash echo "i am a test !" echo "we are the same thing" echo "thank you"
然後執行shell指令碼
執行 Shell 指令碼有兩種方法:
1、作為可執行程式
chmod +x ./test.sh #使指令碼具有執行許可權
./test.sh #執行指令碼./test.sh
//結果如下
i am a test !
we are the same thing
thank you
chmod +x的意思就是給執行許可權
2、作為直譯器引數
這種執行方式是,直接執行直譯器,其引數就是 shell 指令碼的檔名,如:
/bin/sh test.sh
這種方式執行的指令碼,不需要在第一行指定直譯器資訊,寫了也沒用。
使用變數
使用一個定義過的變數,只要在變數名前面加美元符號即可,如:
#!/bin/bash
your_name="twenty-seven"
echo $your_name
echo ${your_name}
#輸出結果為:
twenty-seven
twenty-seven
變數名外面的花括號是可選的,加不加都行,加花括號是為了幫助直譯器識別變數的邊界,比如下面這種情況:如果不加${變數},就會輸出4個"i love color"
#!/bin/bash
for color in red black white yellow;
do
echo "i love ${color}"
done
# 結果如下
# i love red
# i love black
# i love white
# i love yellow
只讀變數 不可以被更改,也不可以被刪除(unset)
使用 readonly 命令可以將變數定義為只讀變數,只讀變數的值不能被改變。
下面的例子嘗試更改只讀變數,結果報錯:
#!/bin/bash
name="twenty-seven"
readonly name
name="twenty-eight"
error:bash: name: 只讀變數
刪除變數
使用 unset 命令可以刪除變數。語法:
unset 變數名
eg:
#!/bin/bash
name="twenty-seven"
echo ${name}
#輸出 twenty-seven
unset name
echo ${name}
#輸出 無輸出
變數被刪除後不能再次使用。unset 命令不能刪除只讀變數。
例項
#!/bin/bash
stu_id="twenty"
echo ${stu_id}
twenty
readonly stu_id
unset stu_id
error:bash: unset: stu_id: 無法反設定: 只讀 variable
以上例項執行將沒有任何輸出。
變數型別
執行shell時,會同時存在三種變數:
- 1) 區域性變數 區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。
- 2) 環境變數 所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要的時候shell指令碼也可以定義環境變數。
- 3) shell變數 shell變數是由shell程式設定的特殊變數。shell變數中有一部分是環境變數,有一部分是區域性變數,這些變數保證了shell的正常執行
Shell 字串
字串是shell程式設計中最常用最有用的資料型別(除了數字和字串,也沒啥其它型別好用了),字串可以用單引號,也可以用雙引號,也可以不用引號。
單引號
#!/bin/bash
name='twenty-seven'
str='my name is ${name}'
echo $str #單引號
#輸出 my name is ${name}
str2="my name is ${name}"
echo $str2 #雙引號
#輸出 my name is twenty-seven
單引號字串的限制:
- 單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的;
- 單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符後也不行),但可成對出現,作為字串拼接使用。
雙引號
name='twenty-seven'
str="Hello, I know you are \"$name\"! \n"
echo $str
#!/bin/bash
name="twenty-seven"
str="hello,the name is "${name}"! \n"
echo $str
#輸出結果: hello,the name is twenty-seven! \n
雙引號的優點:
- 雙引號裡可以有變數
- 雙引號裡可以出現轉義字元