1. 程式人生 > >shell使用小結(更新中...)

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號
[email protected]
與$*相同,但是使用時加引號,並在引號中返回每個引數。
如"[email protected]"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有引數。
$- 顯示Shell使用的當前選項,與set命令功能相同。
$? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤

$* 與 [email protected] 區別:

  • 相同點:都是引用所有引數。
  • 不同點:只有在雙引號中體現出來。假設在指令碼執行時寫了三個引數 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 ]]