shell使用小結(更新中...)

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 Shell運行方式

注意,一定要寫成 ./test.sh,而不是 test.sh,運行其它二進制的程序也一樣,直接寫 test.sh,linux 系統會去 PATH 裏尋找有沒有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 裏,你的當前目錄通常不在 PATH 裏,所以寫成 test.sh 是會找不到命令的,要用 ./test.sh 告訴系統說,就在當前目錄找。

bash test.sh
./test.sh
sh test.sh
source test.sh

Shell 變量

注意,變量名和等號之間不能有空格;

使用變量

使用一個定義過的變量,只要在變量名前面加美元符號即可;

name="chen"
echo $name

Shell 傳遞參數

我們可以在執行 Shell 腳本時,向腳本傳遞參數,腳本內獲取參數的格式爲:$nn 代表一個數字,1 爲執行腳本的第一個參數,2 爲執行腳本的第二個參數,以此類推;

echo "執行的文件名:$0"
echo "第一個參數:$1"
echo "第二個參數:$2"
echo "第三個參數:$3"

爲腳本賦予可執行權限,並執行腳本;

chmod +x test.sh 
./test.sh 1 2 3
參數處理 說明
$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示所有向腳本傳遞的參數。
如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。
$$ 腳本運行的當前進程ID號
$! 後臺運行的最後一個進程的ID號
$@ 與$*相同,但是使用時加引號,並在引號中返回每個參數。
如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。
$- 顯示Shell使用的當前選項,與set命令功能相同。
$? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤

$* 與 $@ 區別:

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

shell數組

Bash Shell 只支持一維數組(不支持多維數組),Shell 數組用括號來表示,元素用"空格"符號分割開;

array=(A D B D "E")

讀取數組,數組下標從0開始;

${array_name[index]}

使用@ 或 * 可以獲取數組中的所有元素,#和@獲取數組長度;

echo "獲取數組中第一個元素: ${array[0]}"

echo "獲取數組中所有的元素: ${array[@]}"
echo "獲取數組中所有的元素: ${array[*]}"

echo "獲取數組長度: ${#array[@]}"
echo "獲取數組長度: ${#array[*]}"

Shell 運算符

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

  • 算數運算符
  • 關係運算符
  • 布爾運算符
  • 字符串運算符
  • 文件測試運算符

原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。expr 是一款表達式計算工具,使用它能完成表達式的求值操作。以下的a、b爲數字變量。

#!/bin/bash

sum=`expr 1 + 2`
echo "兩數相加爲 : $sum"
sub=`expr 3 - 1`
echo "兩數相減爲 : $sub"

注意

  • 表達式和運算符之間要有空格,例如 1+2 是不對的,必須寫成 1 + 2,這與我們熟悉的大多數編程語言不一樣。
  • 完整的表達式要被 ` ` 反引號包含,注意這個字符不是常用的單引號,在 Esc 鍵下邊。

算術運算符

運算符 說明 舉例
+ 加法 `expr $a + $b` 
- 減法 `expr $a - $b` 
* 乘法 `expr $a \* $b` 
/ 除法 `expr $b / $a` 
% 取餘 `expr $b % $a` 
= 賦值 a=$b 將把變量 b 的值賦給 a。
== 相等。用於比較兩個數字,相同則返回 true。 [ $a == $b ] 
!= 不相等。用於比較兩個數字,不相同則返回 true。 [ $a != $b ] 

注意:

  • 條件表達式要放在方括號之間,並且要有空格(表達式與變量之間、表達式與判斷符之間都要有空格),例如: [$a==$b] [$a == $b]都是錯誤的,必須寫成 [ $a == $b ]

布爾運算符

運算符 說明 舉例
! 非運算,表達式爲 true 則返回 false,否則返回 true。 [ ! false ] 
-o 或運算,有一個表達式爲 true 則返回 true。 [ $a -lt 20 -o $b -gt 100 ] 
-a 與運算,兩個表達式都爲 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 

邏輯運算符

運算符 說明 舉例
&& 邏輯的 AND [[ $a -lt 100 && $b -gt 100 ]] 
|| 邏輯的 OR [[ $a -lt 100 || $b -gt 100 ]] 

注意

  • 邏輯運算需要兩個中括號[[ ]],這樣的寫法是錯誤的: [ $a -lt 100 || $b -gt 100 ],正確寫法:[[ $a -lt 100 || $b -gt 100 ]] 

 

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