shell脚本实例
第一個(gè)腳本
#!/bin/bash
echo "Hello World !“
1.例如腳本test.sh中第一行一定是 “#!/bin/bash” 它代表的意思是,該文件使用的是bash語法。如果不設(shè)置該行,那么你的shell腳本就不能被執(zhí)行。
2.’#’在前面講過表示注釋,也可用來寫腳本說明。即后面跟一些該腳本的相關(guān)注釋內(nèi)容以及作者和創(chuàng)建日期或者版本等等,以供日后查看用,所以寫上注釋是有必要的。另外也供其他系統(tǒng)管理員能看懂你的腳本。
3.該腳本第一行再往下走便是要運(yùn)行的命令了。
運(yùn)行 Shell 腳本有兩種方法:
1、作為可執(zhí)行程序 將上面的代碼保存為 test.sh,并 cd 到相應(yīng)目錄: chmod +x ./test.sh #使腳本具有執(zhí)行權(quán)限 ./test.sh 執(zhí)行腳本,我們用vim編輯的文檔默認(rèn)是不帶有執(zhí)行權(quán)限的,所以需要加一個(gè)執(zhí)行權(quán)限,那樣就可以直接使用’./filename’ 執(zhí)行這個(gè)腳本了。
2、作為解釋器參數(shù) 這種運(yùn)行方式是,直接運(yùn)行解釋器,如: /bin/sh test.sh /bin/bash test.sh 這種方式運(yùn)行的腳本,不需要在第一行指定解釋器信息,因?yàn)槟_本解釋器(sh或bash)已經(jīng)明確地被用來執(zhí)行腳本文件test.sh。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.顯示換行? ?echo -e "OK! \n" # -e 開啟轉(zhuǎn)義
? echo "It is a test"
? ?輸出結(jié)果:OK!
It is a test
2.顯示不換行? ?echo -e "OK! \c" # -e 開啟轉(zhuǎn)義 \c 不換行
? ? ? ? ? ? ? ? echo "It is a test"
? ?輸出結(jié)果:? OK! It is a test
3.顯示命令執(zhí)行結(jié)果? ? echo `date`? ? ? ? ? ?注意: 這里使用的是反引號 `, 而不是單引號 '。 結(jié)果將顯示當(dāng)前日期
4.使用變量? ? ? ?使用一個(gè)定義過的變量,只要在變量名前面加上美元符號($)即可,例如:
your_name=“rli“
echo $your_name
echo ${your_name} 變量名外面的花括號是可選的,加不加都行,加花括號是為了幫助解釋器識別變量的邊界,比如下面這種情況:
echo "I am good at ${skill}Script" done
如果不給skill變量加花括號,寫成 echo "I am good at $skillScript“ 解釋器就會(huì)把skillScript當(dāng)成一個(gè)變量(其值為空),代碼執(zhí)行結(jié)果就不是我們期望的樣子了。
只讀變量? ? readonly? var? 使用 readonly 命令可以將變量定義為只讀變量,只讀變量的值不能被改變。
? ?刪除變量? ? 使用 unset 命令可以刪除變量。語法: unset variable_name
?
Shell test 命令
Shell中的 test 命令用于檢查某個(gè)條件是否成立,它可以進(jìn)行數(shù)值、字符和文件三個(gè)方面的測試。
數(shù)值測試
-eq 等于則為真
-ne 不等于則為真
-gt 大于則為真
-ge 大于等于則為真
-lt 小于則為真
-le 小于等于則為真
字符串測試
= 等于則為真
!= 不相等則為真
-z 字符串 字符串的長度為零則為真
-n 字符串 字符串的長度不為零則為真
文件測試
-e 文件名? 如果文件存在則為真
-d 文件名 如果文件存在且為目錄則為真
-f 文件名 如果文件存在且為普通文件則為真
-r 文件名 如果文件存在且可讀則為真
-w 文件名 如果文件存在且可寫則為真
-x 文件名 如果文件存在且可執(zhí)行則為真
-s 文件名 如果文件存在且至少有一個(gè)字符則為真?
-c 文件名 如果文件存在且為字符型特殊文件則為真
-b 文件名 如果文件存在且為塊特殊文件則為真
?
Shell 傳遞參數(shù)
我們可以在執(zhí)行 Shell 腳本時(shí),通過一種shell腳本預(yù)設(shè)變量向腳本傳遞參數(shù),腳本內(nèi)獲取參數(shù)的格式為:$n(即腳本預(yù)設(shè)變量)。n?代表一個(gè)數(shù)字,1 為執(zhí)行腳本的第一個(gè)參數(shù),2 為執(zhí)行腳本的第二個(gè)參數(shù),以此類推……
另外,還有幾個(gè)特殊字符用來處理參數(shù):
$# 傳遞到腳本的參數(shù)個(gè)數(shù)
$* 以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù)。 如“$*”,即指用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數(shù)。
$$ 腳本運(yùn)行的當(dāng)前進(jìn)程ID號(= PID = Process ID)
$! 后臺運(yùn)行的最后一個(gè)進(jìn)程的ID號
$? 顯示上一個(gè)命令的退出狀態(tài)。0表示沒有錯(cuò)誤,其他任何值表明有錯(cuò)誤。
?
數(shù)組
數(shù)組(Array)中可以存放多個(gè)值。Bash Shell 只支持一維數(shù)組(不支持多維數(shù)組),初始化時(shí)不需要定義數(shù)組大小。
與大部分編程語言類似,數(shù)組元素的下標(biāo)由0 (即zero-based)開始。 Shell 數(shù)組用括號來表示,元素用"空格"符號分割開,
語法格式如下: array_name=(value1 ... valuen)
實(shí)例
#!/bin/bash
my_array=(A B "C" D)
我們也可以使用下標(biāo)來定義數(shù)組:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
讀取數(shù)組
讀取數(shù)組元素值的一般格式是: ${array_name[index]}
實(shí)例
#!/bin/bash
my_array=(A B "C" D)
echo "第一個(gè)元素為: ${my_array[0]}"
echo "第二個(gè)元素為: ${my_array[1]}"
echo "第三個(gè)元素為: ${my_array[2]}"
echo "第四個(gè)元素為: ${my_array[3]}"
獲取數(shù)組中的所有元素 使用@ 或 * 可以獲取數(shù)組中的所有元素,例如:
echo "數(shù)組的元素為: ${my_array[*]}"
echo "數(shù)組的元素為: ${my_array[@]}"
獲取數(shù)組的長度 獲取數(shù)組長度的方法與獲取字符串長度的方法相同,例如:
echo "數(shù)組元素個(gè)數(shù)為: ${#my_array[*]}"
echo "數(shù)組元素個(gè)數(shù)為: ${#my_array[@]}"
?
流程控制
和Java、PHP等語言不一樣, sh/bash的流程控制不可為空。如果else分支沒有語句可執(zhí)行,就不要寫這個(gè)else。
?
if語句
if 判斷語句;then
command
fi
?
for 循環(huán)語句
for var in item1 item2 ... itemN
do
command
done
?
?while循環(huán)語句
while 循環(huán)用于不斷執(zhí)行一系列命令,也用于從輸入文件中讀取數(shù)據(jù);命令通常為測試條件。其格式為:
while 判斷條件
do
command
done
?
case 語句
Shell case語句為多選擇語句。可以用case語句匹配一個(gè)值與一個(gè)模式,如果匹配成功,執(zhí)行相匹配的命令。case語句格式如下:
case 值 in
模式1)
command ;;
模式2)
command ;;
esac
?
Shell 函數(shù)
linux shell 可以用戶定義函數(shù),然后在shell腳本中可以隨便調(diào)用。
fun3()
{
echo "\$0 = $0"
# 獲取調(diào)用函數(shù)時(shí) 傳入的參數(shù)
echo "\$1 = $1"
echo "\$2 = $2" return 22
}
#調(diào)用函數(shù)并傳遞參數(shù) fun3 params1 params2 params3
?
用shell腳本編程計(jì)算兩個(gè)數(shù)的和。
#!/bin/bash
a=1
b=2
sum=$[$a+$b]
echo “Sum is $sum.”
數(shù)學(xué)計(jì)算要用’[ ]’括起來并且外頭要帶一個(gè)’$’。 腳本執(zhí)行結(jié)果為: Sum is 3.
轉(zhuǎn)載于:https://www.cnblogs.com/bfcs/p/10710214.html
總結(jié)
 
                            
                        - 上一篇: 25个增强iOS应用程序性能的提示和技巧
- 下一篇: codeforces-1132 (div
