Shell  編程

Shell  編程
Shell 是一個用 C 語言編寫的程序,通過 Shell 用戶可以訪問操作系統內核
服務。它類似於 DOS 下的 command 和後來的 cmd.exe。Shell 既是一種命令語言,
又是一種程序設計語言。
Shell script 是一種爲 shell 編寫的腳本程序。Shell 編程一般指 shell
腳本編程,不是指開發 shell 自身。
Shell 編程跟 java、php 編程一樣,只要有一個能編寫代碼的文本編輯器
和一個能解釋執行的腳本解釋器就可以了。
Linux 的 Shell 種類衆多,一個系統可以存在多個 shell,可以通過 cat
/etc/shells 命令查看系統中安裝的 shell。
Bash 由於易用和免費,在日常工作中被廣泛使用。同時,Bash 也是大多數
Linux 系統默認的 Shell。
1 .  基本格式
使用 vi 編輯器新建一個文件 hello.sh。擴展名並不影響腳本執行,見名知
意。比如用 php 寫 shell 腳本,擴展名就用 .php。
#!/bin/bash
echo "Hello World !"
#!是一個約定的標記,它告訴系統這個腳本需要什麼解釋器來執行,即使用
哪一種 Shell。
echo 命令用於向窗口輸出文本。
Shell 腳本的執行:
chmod +x ./hello.sh #使腳本具有執行權限
./hello.sh #執行腳本
直接寫 hello.sh,linux 系統會去 PATH 裏尋找有沒有叫 hello.sh
的。用 ./hello.sh 告訴系統說,就在當前目錄找。
還可以作爲解釋器參數運行。直接運行解釋器,其參數就是 shell 腳
本的文件名,如:
北京市昌平區建材城西路金燕龍辦公樓一層 電話:400-618-9090
/bin/sh /root/hello.sh
/bin/php test.php
這種方式運行腳本,不需要在第一行指定解釋器信息,寫了也不生效。
2 . Shell  變量
2.1 .  語法 格式
變量=值,如:your_name="itcast.cn"
注意:變量名和等號之間不能有空格,同時,變量名的命名須遵循如下規則:
 首個字符必須爲字母(a-z,A-Z)
 中間不能有空格,可以使用下劃線(_)
 不能使用標點符號
 不能使用 bash 裏的關鍵字(可用 help 命令查看保留關鍵字)
2.2 .  變量 使用
使用一個定義過的變量,只要在變量名前面加 $ 即可。
your_name="itcast.cn"
echo $your_name
echo ${your_name}
花括號是可選的,加不加都行,加花括號是爲了幫助解釋器識別變量的邊界。
已定義的變量,可以被重新定義。
使用 readonly 命令可以將變量定義爲只讀變量,只讀變量的值不能被改變。
使用 unset 命令可以刪除變量。不能刪除只讀變量。
readonly variable_name
unset variable_name
2.3 .  變量類型
局部變量 局部變量在腳本或命令中定義,僅在當前 shell 實例中有效,其
他 shell 啓動的程序不能訪問局部變量。
北京市昌平區建材城西路金燕龍辦公樓一層 電話:400-618-9090
環境變量 所有的程序,包括 shell 啓動的程序,都能訪問環境變量,有些程
序需要環境變量來保證其正常運行。可以用過 set 命令查看當前環境變量。
shell 變量 shell 變量是由 shell 程序設置的特殊變量。shell 變量中有一
部分是環境變量,有一部分是局部變量,這些變量保證了 shell 的正常運行。
3 . Shell  參數傳遞
在執行 Shell 腳本時,可以向腳本傳遞參數。
腳本內獲取參數的格式爲:$n。n 代表一個數字,1 爲執行腳本的第一個參
數,2 爲執行腳本的第二個參數,以此類推…… $0 表示當前腳本名稱。
3.1 .  特殊字符
$#  傳遞到腳本的參數個數
$*  以一個單字符串顯示所有向腳本傳遞的參數。
$$  腳本運行的當前進程 ID 號
$!  後臺運行的最後一個進程的 ID 號
$@  與$*相同,但是使用時加引號,並在引號中返回每個參數。
$?  顯示最後命令的退出狀態。0 表示沒有錯誤,其他任何值表明有錯誤。
例子:
#!/bin/bash
echo "第一個參數爲:$1";
echo "參數個數爲:$#";
echo "傳遞的參數作爲一個字符串顯示:$*";
執行腳本:./test.sh 1 2 3
3.2 . $* 和$@ 區別
相同點:都表示傳遞給腳本的所有參數。
不同點:
不被" "包含時,$*和$@都以$1 $2… $n 的形式組成參數列表。
被" "包含時,"$*" 會將所有的參數作爲一個整體,以"$1 $2 … $n"
的形式組成一個整串;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的
形式組成一個參數列表。
北京市昌平區建材城西路金燕龍辦公樓一層 電話:400-618-9090
4 . Shell  運算符
Shell 和其他編程語音一樣,支持包括:算術、關係、布爾、字符串等運
算符。原生 bash 不支持簡單的數學運算,但是可以通過其他命令來實現,例如
expr。expr 是一款表達式計算工具,使用它能完成表達式的求值操作。
例如,兩個數相加:
val=`expr 2 + 2`
echo $val
注意:
表達式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2。
完整的表達式要被 ` ` 包含,注意不是單引號,在 Esc 鍵下邊。
詳細請參考附件資料《shell 運算符》。
此外,還可以通過(())、$[]進行算術運算。
count=1
((count++))
echo $count
a=$((1+2))
a=$[1+2]
5 .  流程控制
5.1 . if else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
北京市昌平區建材城西路金燕龍辦公樓一層 電話:400-618-9090
5.2 . for
方式一
for N in 1 2 3
do
echo $N
done

for N in 1 2 3; do echo $N; done

for N in {1..3}; do echo $N; done
方式二
for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done

for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done
5.3 . while
方式一
while expression
do
command

done
方式二
i=1
while ((i<=3))
do
echo $i
let i++
done
let 命令是 BASH 中用於計算的工具,用於執行一個或多個表達式,變量
計算中不需要加上 $ 來表示變量。自加操作: let no++ 自減操作: let no —
北京市昌平區建材城西路金燕龍辦公樓一層 電話:400-618-9090
方式三:無限循環
while true
do
command
done
5.4 . case
case 值 in
模式 1)
command1
command2
...
commandN
;;
模式 2)
command1
command2
...
commandN
;;
esac
6 .  函數使用
所有函數在使用前必須定義。這意味着必須將函數放在腳本開始部分,直至
shell 解釋器首次發現它時,纔可以使用。調用函數僅使用其函數名即可。
[ function ] funname [()]
{
action;
[return int;]
}
1、可以帶 function fun()定義,也可以直接 fun() 定義,不帶任何參數。
2、參數返回,可以顯示加 return ,如果不加,將以最後一條命令運行結
果,作爲返回值。 return 後跟數值 n(0-255)。
北京市昌平區建材城西路金燕龍辦公樓一層 電話:400-618-9090
6.1 .  函數參數
在 Shell 中,調用函數時可以向其傳遞參數。在函數體內部,通過 $n 的形
式來獲取參數的值,例如,$1 表示第一個參數,$2 表示第二個參數...
注意,當 n>=10 時,需要使用${n}來獲取參數。
funWithParam(){
echo "第一個參數爲 $1 !"
echo "第二個參數爲 $2 !"
echo "第十個參數爲 $10 !"
echo "第十個參數爲 ${10} !"
echo "第十一個參數爲 ${11} !"
echo "參數總數有 $# 個!"
echo "作爲一個字符串輸出所有參數 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

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