Mac下Shell腳本使用學習筆記(一)


參考文獻 Shell 教程
MAC常用終端命令行
Mac下Shell腳本使用

1.使用終端創建test.sh:

(1)進入指定文件夾路徑(命令示例:cd Desktop/面向對象程序設計);
(2)創建test.sh文件(命令示例:touch test.sh);

(3)創建第一個Shell腳本:

#!/bin/bash
echo "Hello World!"

注:#! 是一個約定的標記,它告訴系統這個腳本需要什么解釋器來執行,即使用哪一種 Shell。
echo 命令用於向窗口輸出文本。
(4)通過終端運行[附運行 Shell 腳本有兩種方法,本文采用第一種]:

注意:

  • 一定要輸入./test.sh而不是,tech.sh
  • 第一次出現錯誤Permission denied,需先輸入chmod u+x ./test.sh //使腳本具有執行權限再執行腳本。

2.Shelld的基本語法:

(1)變量:

①定義變量時,變量名不加美元符號($,PHP語言中變量需要),如:

your_name="Kenn"

變量命名規則同C語言相同,但有一點注意的地方就是變量名和等號之間不能有空格
②使用變量時,只要在變量名前面加美元符號即可,如:

your_name="Kenn"
echo $your_name //或者 echo ${your_name}

變量名外面的花括號是可選的,加不加都行,加花括號是為了幫助解釋器識別變量的邊界。
如:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done   

如果不給skill變量加花括號,寫成echo "I am good at $skillScript",解釋器就會把$skillScript當成一個變量(其值為空),代碼執行結果就不是我們期望的樣子了。
推薦給所有變量加上花括號,這是個好的編程習慣。
③已定義的變量,可以被重新定義,如:

your_name="Tom"
echo $your_name
your_name="Kenn"
echo $your_name

這樣寫是合法的,但注意,第二次賦值的時候不能寫$your_name="alibaba"使用變量的時候才加美元符($)。
④只讀變量(readonly+變量名,只讀變量的值不能被改變)、刪除變量(變量被刪除后不能再次使用,unset 命令不能刪除只讀變量)。
⑤變量類型(局部變量、環境變量、shell變量)。

(2)字符串:

字符串可以用單引號,也可以用雙引號,也可以不用引號。(優缺點可見參考鏈接)
①拼接字符串(echo $greeting $greeting_1);
②獲取字符串長度(echo ${#printf_name});
③提取子字符串(第一個字符的索引值為 0,與C語言規范相同,echo ${printf_name:1:5}#輸出ello,從字符串第2個字符開始截取五個字符);

④查找子字符串(注意:以下腳本中是反引號,而不是單引號):
例:查找字符 i 或 o 的位置(哪個字母先出現就計算哪個)

string="runoob is a great site"
echo `expr index "$string" io`  # 輸出 4
```</font>
#### <font face="Times New Roman"><font color=Green>(3)數組:</font></font><br/><font face="黑體">
bash支持一維數組(不支持多維數組),並且沒有限定數組的大小。類似與C語言,數組元素的下標由0開始編號。獲取數組中的元素要利用下標,下標可以是整數或算術表達式,其值應大於或等於0。
①定義數組`數組名=(值1 值2 ... 值n)`:在 Shell 中,用括號來表示數組,數組元素用"空格"符號分割開。還可以單獨定義數組的各個分量,可以不使用連續的下標,而且下標的范圍沒有限制。
②讀取數組:`${數組名[下標]}`,使用`@`符號可以獲取數組中的所有元素,例如:`echo ${array_name[@]}`。
③獲取數組的長度:獲取數組長度的方法與獲取字符串長度的方法相同,例如:
```shell
# 取得數組元素的個數
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得數組單個元素的長度
lengthn=${#array_name[n]}

(4)Shell 注釋:

#開頭的行就是注釋,會被解釋器忽略。通過每一行加一個#號設置多行注釋。
多行注釋還可以使用以下格式:

:<<EOF
注釋內容...
注釋內容...
注釋內容...
EOF

EOF也可以使用其他符號:

:<<'
注釋內容...
注釋內容...
注釋內容...
'

:<<!
注釋內容...
注釋內容...
注釋內容...
!

(5)Shell 傳遞參數:

我們可以在執行 Shell 腳本時,向腳本傳遞參數,腳本內獲取參數的格式為:$n。n 代表一個數字,1 為執行腳本的第一個參數,2 為執行腳本的第二個參數,以此類推。(其中$0為執行的文件名,傳遞的參數中如果包含空格,應該使用單引號或者雙引號將該參數括起來,以便於腳本將這個參數作為整體來接收。)具體,可見參考鏈接。

$*$@區別:
相同點:都是引用所有參數。
不同點:只有在雙引號中體現出來。假設在腳本運行時寫了三個參數 1、2、3,,則 " * " 等價於 "1 2 3"(傳遞了一個參數),而 "@" 等價於 "1" "2" "3"(傳遞了三個參數)。

(6)Shell 基本運算符:

Shell 和其他編程語言一樣,支持多種運算符,包括:

  • 算數運算符
  • 關系運算符(關系運算符只支持數字,不支持字符串,除非字符串的值是數字)
  • 布爾運算符
  • 字符串運算符
  • 文件測試運算符
    注意:
  • 表達式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2,這與我們熟悉的大多數編程語言不一樣。
  • 完整的表達式要被```包含.
  • 條件表達式要放在方括號之間,並且要有空格,例如: [$a==$b] 是錯誤的,必須寫成 [ $a == $b ]Shell 中的中括號用法總結
  • 乘號(*)前邊必須加反斜杠()才能實現乘法運算;
  • 在 MAC 中 shell 的 expr 語法是:$((表達式)),此處表達式中的 "*" 不需要轉義符號 "" 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM