Linux筆記--5 --- shell腳本
2014-07-16
Shell腳本
Shell腳本是一個包含一系列命令序列的文本文件。當運行這個腳本文件時,文件中包含的
命令序列將得到執行。
語法
1, Shell腳本的第一行必須是如下格式:
#!/bin/sh
符號 #! 用來指定該腳本文件的解析程序。在上面的例子中使用 /bin/sh 來解析該腳本。
當編輯好腳本後,如果要執行該腳本,還必須使其具有可執行屬性。
chmod +x filename
(也可以用 命令 : sh filename 執行)
2, 在進行 shell 編程時,以 # 開頭的句子表示註釋,直到這一行的結束。
3, 在 shell 編程中, 所有的變量都由字符串組成,並且不需要預先對變量進行聲明。
例: #!/bin/sh
#set variable a
a="hello world"
#print a
echo "A is:"
echo $a
注意:變量賦值時, “=”左右兩邊都不能有空格。
BASH中的語句結尾不需要分號。
3.1 有時候變量名很容易與其他文字混淆。例:
num=2
echo "this is the $numnd"
執行結果是:輸出 :this is the
原因:shell 會去搜索變量 numnd 的值,但是這個變量是沒有值的。
可以用花括號來告訴shell我們要打印的是num變量
echo "this is the ${num}nd"
這將打印: this is the 2nd
3.2 默認變量
$# : 傳入腳本的命令行參數個數
$* : 所有命令行參數值,在各個參數值之間留有空格
$0 : 命令本身 (shell文件名)
$1 : 第一個命令行參數
$2 : 第二個命令行參數
3.3 局部變量
在變量首次被賦值時加上 local 關鍵字可以聲明一個局部變量。例:
#!/bin/bash
hello="var1"
echo $hello
function func1 {
local hello="var2"
echo $hello
}
func1
echo $hello
注意:func1 後面的花括號前要有個空格
輸出:var1
var2
var1
4,if 語句
4.1 if[ expression ]
then
#code block
fi
4.2 if[ expression ]
then
#code block
else
#code block
fi
4.3 if [expression ]
then
#code block
else if[ expression ]
then
#code block
else
#code block
fi
fi
4.4 if [ expression ];then
#code block
elif [ expression ]
then
#code block
else
#code block
fi
fi
5, 比較
比較操作 整數操作 字符串操作
相同 -eq =
不同 -ne !=
大於 -gt >
小於 -lt <
大於或等於 -ge
小於或等於 -le
爲空 -z
不爲空 -n
例:
1,比較整數a和b是否相等: if [ $a = $b ] (也可用 eq )
2,判斷整數a是否大於整數b: if [ $a -gt $b]
3,比較字符串a和b是否相等: if [ $a = $b ]
4,判斷字符串 a 是否爲空: if [ -z $a ]
注意:
1,在 "["和"]"符號的左右都留有空格
2. “=”左右都有空格
6,判斷
-e 文件已經存在
-f 文件是普通文件
-s 文件大小不爲零
-d 文件是一個目錄
-r 文件對當前用戶可以讀取
-w 文件對當前用戶可以寫入
-x 文件對當前用戶可以執行
例:
#!/bin/sh
folder=/home
[ -r "$folder" ] && echo "Can read $folder"
[ -f "$folder" ] || echo "this is not file"
7,For 循環
for循環結構與 C 語言中有所不同, 在 BASH 中 for 循環的基本結構是:
for var in [list]
do
#code block
done
其中 $var 是循環控制變量,[list]是var需要遍歷的一個集合,do/done對
包含了循環體,相當於 C 語言中的一對大括號。另外如果 do 和 for 被寫在同一行,
必須在 do 前面加上 ";" 。
如: for $var in [list];do
例1:
#!/bin/bash
for day in Sun Mon Tue Wed Thu Fri Sat
do
echo $day
done
例2: 如果列表被包含在一對雙引號中,則被認爲是一個元素:
#!/bin/bash
for day in "Sun Mon Tue Wed Thu Fri Sat"
do
echo $day
done
注意: 在for所在那行,變量 day 是沒有加 "$"符號的,而在循環體內, echo 所在行變量
$day 是必須加上 “$”符號的。
8, while 循環
while 循環的基本結構是:
while [ condition ]
do
#code block
done
9, until 循環
until 循環的基本結構是:
until [ condition ]
do
#code block
done
while 和 until 的區別在於 while 是爲真時執行, until是爲假時執行。
10,Case語句
BASH 中的 case 結構與 C 語言中的 switch 語句的功能比較類似,可以用於進行
多項分支控制。
case "$var" in
condition1 )
;;
condition2 )
;;
* )
default statments;;
esac
例:
#!/bin/bash
echo "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腳本是一個包含一系列命令序列的文本文件。當運行這個腳本文件時,文件中包含的
命令序列將得到執行。
語法
1, Shell腳本的第一行必須是如下格式:
#!/bin/sh
符號 #! 用來指定該腳本文件的解析程序。在上面的例子中使用 /bin/sh 來解析該腳本。
當編輯好腳本後,如果要執行該腳本,還必須使其具有可執行屬性。
chmod +x filename
(也可以用 命令 : sh filename 執行)
2, 在進行 shell 編程時,以 # 開頭的句子表示註釋,直到這一行的結束。
3, 在 shell 編程中, 所有的變量都由字符串組成,並且不需要預先對變量進行聲明。
例: #!/bin/sh
#set variable a
a="hello world"
#print a
echo "A is:"
echo $a
注意:變量賦值時, “=”左右兩邊都不能有空格。
BASH中的語句結尾不需要分號。
3.1 有時候變量名很容易與其他文字混淆。例:
num=2
echo "this is the $numnd"
執行結果是:輸出 :this is the
原因:shell 會去搜索變量 numnd 的值,但是這個變量是沒有值的。
可以用花括號來告訴shell我們要打印的是num變量
echo "this is the ${num}nd"
這將打印: this is the 2nd
3.2 默認變量
$# : 傳入腳本的命令行參數個數
$* : 所有命令行參數值,在各個參數值之間留有空格
$0 : 命令本身 (shell文件名)
$1 : 第一個命令行參數
$2 : 第二個命令行參數
3.3 局部變量
在變量首次被賦值時加上 local 關鍵字可以聲明一個局部變量。例:
#!/bin/bash
hello="var1"
echo $hello
function func1 {
local hello="var2"
echo $hello
}
func1
echo $hello
注意:func1 後面的花括號前要有個空格
輸出:var1
var2
var1
4,if 語句
4.1 if[ expression ]
then
#code block
fi
4.2 if[ expression ]
then
#code block
else
#code block
fi
4.3 if [expression ]
then
#code block
else if[ expression ]
then
#code block
else
#code block
fi
fi
4.4 if [ expression ];then
#code block
elif [ expression ]
then
#code block
else
#code block
fi
fi
5, 比較
比較操作 整數操作 字符串操作
相同 -eq =
不同 -ne !=
大於 -gt >
小於 -lt <
大於或等於 -ge
小於或等於 -le
爲空 -z
不爲空 -n
例:
1,比較整數a和b是否相等: if [ $a = $b ] (也可用 eq )
2,判斷整數a是否大於整數b: if [ $a -gt $b]
3,比較字符串a和b是否相等: if [ $a = $b ]
4,判斷字符串 a 是否爲空: if [ -z $a ]
注意:
1,在 "["和"]"符號的左右都留有空格
2. “=”左右都有空格
6,判斷
-e 文件已經存在
-f 文件是普通文件
-s 文件大小不爲零
-d 文件是一個目錄
-r 文件對當前用戶可以讀取
-w 文件對當前用戶可以寫入
-x 文件對當前用戶可以執行
例:
#!/bin/sh
folder=/home
[ -r "$folder" ] && echo "Can read $folder"
[ -f "$folder" ] || echo "this is not file"
7,For 循環
for循環結構與 C 語言中有所不同, 在 BASH 中 for 循環的基本結構是:
for var in [list]
do
#code block
done
其中 $var 是循環控制變量,[list]是var需要遍歷的一個集合,do/done對
包含了循環體,相當於 C 語言中的一對大括號。另外如果 do 和 for 被寫在同一行,
必須在 do 前面加上 ";" 。
如: for $var in [list];do
例1:
#!/bin/bash
for day in Sun Mon Tue Wed Thu Fri Sat
do
echo $day
done
例2: 如果列表被包含在一對雙引號中,則被認爲是一個元素:
#!/bin/bash
for day in "Sun Mon Tue Wed Thu Fri Sat"
do
echo $day
done
注意: 在for所在那行,變量 day 是沒有加 "$"符號的,而在循環體內, echo 所在行變量
$day 是必須加上 “$”符號的。
8, while 循環
while 循環的基本結構是:
while [ condition ]
do
#code block
done
9, until 循環
until 循環的基本結構是:
until [ condition ]
do
#code block
done
while 和 until 的區別在於 while 是爲真時執行, until是爲假時執行。
10,Case語句
BASH 中的 case 結構與 C 語言中的 switch 語句的功能比較類似,可以用於進行
多項分支控制。
case "$var" in
condition1 )
;;
condition2 )
;;
* )
default statments;;
esac
例:
#!/bin/bash
echo "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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.