1. 程式人生 > >linux shell 程式設計基礎筆記

linux shell 程式設計基礎筆記

1.變數

命名規則,只能以數字,字母,下劃線開始

  • 命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭。
  • 中間不能有空格,可以使用下劃線(_)。
  • 不能使用標點符號。
  • 不能使用bash裡的關鍵字(可用help命令檢視保留關鍵字)
  •  舉例說明
  • RUNOOB
    LD_LIBRARY_PATH
    _var
    var2
  • 2.定義變數
  • your_name='hanzl'
  • 使用變數
  • echo $your_name
  • 注意${your_name}和 $your_name 效果一樣 ,帶{}的意義在於更好的區分變數的邊界。
  • 3.只讀變數
  • myUrl="http://www.w3cschool.cc"readonly
    myUrl
  • 4.刪除變數
  • unset variable_name
    #!/bin/sh
    myUrl="http://www.runoob.com"
    unset myUrl
    echo $myUrl
  • 5.拼接字串
  • your_name="qinjx"
    greeting="hello, "$your_name" !"
    greeting_1="hello, ${your_name} !"
    echo $greeting $greeting_1
    獲取字串長度  
    string="abcd"
    echo ${#string}#輸出 4
  • string="runoob is a great site"
    echo $
    {string:1:4}# 輸出 unoo
    查詢子字串位置
  • 查詢字元 "i 或 s" 的位置:
  • string="runoob is a great company"
    echo `expr index "$string" is`# 輸出 8
    6.shell 陣列(值中間 空格隔開)
  • 陣列名=(a b c...)
  • 單獨定義變數
  • arr=(a b c)
  • arr[0]=a
  • arr[1]=b
  • arr[2]=c
  • 讀取陣列
  • ${arr[0]}
獲取陣列的長度
# 取得陣列元素的個數
length=${#array_name[@]}# 或者
length=${#array_name[*]}# 取得陣列單個元素的長度
lengthn=${#array_name[n]}

6.shell傳遞引數echo "Shell 傳遞引數例項!";
echo "執行的檔名:$0";
echo "第一個引數為:$1";
echo "第二個引數為:$2";
echo "第三個引數為:$3";
執行結果 [[email protected] ~]# ./test.sh 1 2 3
hanzl
Hello World !
hello, qinjx ! hello, qinjx !
Shell 傳遞引數例項!
執行的檔名:./test.sh
第一個引數為:1
第二個引數為:2
第三個引數為:3

另外,還有幾個特殊字元用來處理引數:

引數處理 說明
$# 傳遞到指令碼的引數個數
$* 以一個單字串顯示所有向指令碼傳遞的引數。
如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有引數。
$$ 指令碼執行的當前程序ID號
$! 後臺執行的最後一個程序的ID號
[email protected] 與$*相同,但是使用時加引號,並在引號中返回每個引數。
如"[email protected]"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有引數。
$- 顯示Shell使用的當前選項,與set命令功能相同。
$? 顯示最後命令的退出狀態。0表示沒有錯誤,其

echo "Shell 傳遞引數例項!";
echo "第一個引數為:$1";
    
echo "引數個數為:$#";
echo "傳遞的引數作為一個字串顯示:$*";

顯示結果為

########ddddd###########
Shell 傳遞引數例項!
第一個引數為:1
引數個數為:3
傳遞的引數作為一個字串顯示:1 2 3
[[email protected] ~]# vim test.sh

$* 和 [email protected]的區別

# $* he [email protected]
echo "-- \$* 演示 ---"
for i in "$*"; do
    echo $i
done


echo "-- \[email protected] 演示 ---"
for i in "[email protected]"; do
    echo $i
done

演示結果

-- $* 演示 ---
1 2 3
-- [email protected] 演示 ---
1
2
3

 獲取陣列元素 所有演示結果

echo "陣列的元素為: ${my_array[*]}"
echo "陣列的元素為: ${my_array[@]}"
陣列演示

程式碼

arr=(a b c d)
echo "first="${arr[0]}
echo "second="${arr[1]} 
echo "third="${arr[2]}
echo "four="${arr[3]}
    
echo "arr arr[@]="${arr[@]}
echo "arr arr[*]="${arr[*]}

演示結果

first=a
second=b
third=c
four=d
arr arr[@]=a b c d
arr arr[*]=a b c d
[[email protected] ~]# vim test.sh

7.Shell 基本運算子

Shell 和其他程式語言一樣,支援多種運算子,包括:

  • 算數運算子
  • 關係運算符
  • 布林運算子
  • 字串運算子
  • 檔案測試運算子

  • 原生bash不支援簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。

    expr 是一款表示式計算工具,使用它能完成表示式的求值操作。

  • 舉例 
    val=`expr 2 + 2`
    echo "兩數之和為 : $val"
結果

兩數之和為 : 4

算術運算子

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

舉例說明
a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"if[ $a == $b ]then
   echo "a 等於 b"fiif[ $a != $b ]then
   echo "a 不等於 b"fi

執行指令碼,輸出結果如下所示:

a + b :30
a - b :-10
a * b :200
b / a :2
b % a :0
a 不等於 b
關係運算符
運算子 說明 舉例
-eq 檢測兩個數是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 檢測兩個數是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 檢測左邊的數是否大於右邊的,如果是,則返回 true。 [ $a -gt $b ] 返回 false。
-lt 檢測左邊的數是否小於右邊的,如果是,則返回 true。 [ $a -lt $b ] 返回 true。
-ge 檢測左邊的數是否大於等於右邊的,如果是,則返回 true。 [ $a -ge $b ] 返回 false。
-le 檢測左邊的數是否小於等於右邊的,如果是,則返回 true。 [ $a -le $b ] 返回 true。

舉例說明
a=10
b=20if[ $a -eq $b ]then
   echo "$a -eq $b : a 等於 b"else
   echo "$a -eq $b: a 不等於 b"fiif[ $a -ne $b ]then
   echo "$a -ne $b: a 不等於 b"else
   echo "$a -ne $b : a 等於 b"fiif[ $a -gt $b ]then
   echo "$a -gt $b: a 大於 b"else
   echo "$a -gt $b: a 不大於 b"fiif[ $a -lt $b ]then
   echo "$a -lt $b: a 小於 b"else
   echo "$a -lt $b: a 不小於 b"fiif[ $a -ge $b ]then
   echo "$a -ge $b: a 大於或等於 b"else
   echo "$a -ge $b: a 小於 b"fiif[ $a -le $b ]then
   echo "$a -le $b: a 小於或等於 b"else
   echo "$a -le $b: a 大於 b"fi

執行指令碼,輸出結果如下所示:

10-eq 20: a 不等於 b
10-ne 20: a 不等於 b
10-gt 20: a 不大於 b
10-lt 20: a 小於 b
10-ge 20: a 小於 b
10-le 20: a 小於或等於 b

布林運算子

下表列出了常用的布林運算子,假定變數 a 為 10,變數 b 為 20:

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