shell指令碼是乙個包含一系列命令序列的文字檔案。當執行這個指令碼檔案時,檔案中包含的命令序列將得到執行 。
語法:shell指令碼的第一行必須是如下格式:#!/bin/sh
符號#!用來指定該指令碼檔案的解析程式。在上面例子中使用/bin/sh來解析該指令碼。當編輯好指令碼後,如果要執行該指令碼,還必須使其具有可執行屬性
注釋:
在進行shell程式設計時,以#開頭的句子表示注釋,直到這一行的結束。如果使用了注釋,即使相當長的時間內沒有使用該指令碼,也能在很短的時間內明白該指令碼的作
用及工作原理。
變數:
在shell程式設計中,所有的變數都由字串組成,並且不需要預先對變數進行宣告,例:s1(演示)
。
#!/bin/sh#set
variable a
a="hello world
"# print a
echo
"a is:
"echo $a
注意:shell會去搜尋變數的值,如果這個變數沒有值,則就無列印。
預設變數
$# :傳入指令碼的命令列引數個數
$* :所有命令列引數值,在各個引數值之間留有空格
$0 :命令本身(shell檔名) // ./hello.sh
$1 :第乙個命令列引數
$2 :第二個命令列引數
區域性變數
在變數首次被賦值時加上 local 關鍵字可以宣告乙個區域性變數,例:s4(演示):
#!/bin/bashhello="
var1
"echo $hello
function func1
func1
echo $hello
注意:變數
變數賦值時,「=」左右兩邊都不能有空格
bash中的語句結尾不需要分號
if語句 //每乙個if對應乙個fi
if[ expression ]
then
#code block
fiif [ expression ]
then
#code block
else
#code block
fiif [ expression ]
then
#code block
else if [ expression ]
then
#code block
else
#code block
fifi
if [ expression ]; then
#code block
elif [ expression ]
then
#code block
else
#code block
fifi
邏輯比較
比較操作 整數操作 字串操作相同 -eq =不同 -ne !=大於 -gt >小於 -lt 《大於或等於 -ge
小於或等於 -le
為空 -z
不為空 -n
比較整數a和b是否相等:if [ $a =$b ] (也可用eq)判斷整數a是否大於整數b:
if [ $a -gt $b ]
比較字串a和b是否相等:
if [ $a =$b ]
判斷字串a是否為空:
if [ -z $a ]
判斷整數變數a是否大於b:
if [ $a -gt $b ]
注意:
1.在「[」和「]」符號的左右都留有空格
2.「=」左右都有空格
檔案判斷
-e 檔案已經存在
-f 檔案是普通檔案
-s 檔案大小不為零
-d 檔案是乙個目錄
-r 檔案對當前使用者可以讀取
-w 檔案對當前使用者可以寫入
-x 檔案對當前使用者可以執行
for語句
基本結構是:
forvarin
[list]
do#code block
done
其 中 $var 是迴圈控制變數,[list] 是 var 需要遍歷的乙個集合,do/done 對包含了迴圈體,相當於 c 語言中的一對大括號。另外如果do 和 for 被寫在同一行,必須在do 前面加上 「;」。如: for $var in [list]; do
ex:
#!/bin/bashfor day in
sun mon tue wed thu fri sat
doecho $day
done
注意:1.如果列表被包含在一對雙引號中,則被認為是乙個元素
2.上面的例子中,在 for 所在那行,變數 day 是沒有加 "$" 符號的,而在迴圈體內,echo 所在行變數$day 是必須加上 "$" 符號的
while迴圈
基本結構是:
while[ condition ]
do#code block
done
until迴圈
基本結構是:
until [ condition ]do#code block
done
while 和 until的區別在於while是為真時執行,until是為假時執行
case語句
bash 中的 case 結構與 c 語言中的 switch 語句的功能比較類似,可以用於進行多項分支控制。
case"$var"in
condition1 )
語句;;
condition2 )
語句;;
*)default
statments;;
esac
#!/bin/bashecho
"hit a key, then hit return.
"read keypress
case
"$keypress"in
[a-z] ) echo "
uppercase letter";;
[a-z] ) echo "
lowercase letter";;
[0-9] ) echo "
digit";;
* ) echo "
punctuation, whitespace, or other";;
esac
Shell程式設計 shell特性
linux會預設記錄1000條歷史記錄,可通過 echo histsize 檢視,如果講histsize更改為2000,那麼會預設儲存2000條。1000條記錄儲存在家目錄的 bash history 中,僅當使用者正常退出當前shell時,當前shell中執行的命令才會儲存到 bash histo...
Shell程式設計 Shell函式
shell函式 1.將命令序列按格寫在一起 2.可方便重複使用命令序列 3.shell函式定義 function 函式名 4.呼叫函式的方法 函式名 引數1 引數2 5.shell函式應用示例 1 兩個數字求和 要求 通過sum 定義函式 兩個數求和 方法一 root localhost vim d...
Shell程式設計
1 建立指令碼 vi emacs等即可 bin sh 2 shell變數 對shell來講,所有的變數的取值都是乙個字串 shell是一種解釋性語言,變數無需事先定義 shell中的系統變數 程式命令列引數的數目 儲存前乙個命令的返回值 0 當前程式名 以 1 2 形式儲存所有輸入的命令列引數 以 ...