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
- 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 $
查詢子字串位置 -
查詢字元
"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。 |