shell script介紹
1浴骂、shell script
1.1、定義
- 其實(shí)就是純文本文件讨跟,以固定的語(yǔ)法組織起來(lái)菠剩。
- 可以編輯這個(gè)文件, 讓這個(gè)文件幫我們 一次執(zhí)行多個(gè)命令易猫。
- 可以通過(guò)一些運(yùn)算與邏輯判斷來(lái)幫我們達(dá)成某些較復(fù)雜的功能。
1.2具壮、運(yùn)行方式
shell.sh文件必須具備可讀與可執(zhí)行 (rx) 的權(quán)限
- 直接執(zhí)行:
- 絕對(duì)路徑:運(yùn)行文件所在的絕對(duì)路徑來(lái)執(zhí)行指令准颓,如/home/zkpk/apps/shell.sh
- 相對(duì)路徑:cd到腳本所在目錄 ,使用 ./shell.sh 執(zhí)行
- bash執(zhí)行:
- bash shell.sh
- sh shell.sh
- source 執(zhí)行
- source shell.sh
1.3、腳本基本格式
#!/bin/bash
# Shows "Hello World!" in your screen.
echo -e "Hello World! \a \n"
exit 0
第一行:基本格式棺妓,告知系統(tǒng)執(zhí)行方式攘已,當(dāng)采用非sh XXX.sh格式執(zhí)行時(shí),此行必須怜跑。
第二行:注釋样勃,#開頭,后面的文字內(nèi)容不參與程序執(zhí)行性芬。
第三行:基本的輸出語(yǔ)句彤灶。在屏幕打印"Hello World!"。
第四行:腳本執(zhí)行完畢的返回語(yǔ)句批旺。可以使用echo $?
來(lái)獲取執(zhí)行后返回值诵姜。
1.4汽煮、數(shù)值運(yùn)算
格式:$((運(yùn)算主體))
實(shí)例(乘法運(yùn)算):
#!/bin/bash
echo -e "Input 2 numbers, I will cross them! \n"
read -p "first number: " firstnu #鍵盤錄入數(shù)字,存到firstnu中
read -p "second number: " secnu #鍵盤錄入數(shù)字2棚唆,存到secnu中
total=$(($firstnu*$secnu)) #進(jìn)行運(yùn)算
echo -e "\nThe result of $firstnu x $secnu is ==> $total" #輸出結(jié)果
第四行$(($firstnu$secnu)) 為雙重括號(hào)暇赤,若刪去一層則以字符串進(jìn)行運(yùn)算
1.5、test判斷命令
使用范例:test -e demo.txt
- 判斷某個(gè)文件類型
- -e 該文件是否存在
- -f 該文件是否存在且為文件(file)
- -d 該文件名是否存在且為目錄(directory)
- -b 該文件是否存在且為一個(gè) block device 裝置
- -c 該文件是否存在且為一個(gè) character device 裝置
- -S 該文件是否存在且為一個(gè) Socket 文件
- -p 該文件是否存在且為一個(gè) FIFO (pipe) 文件
- -L 該文件是否存在且為一個(gè)連接文件
- 判斷文件權(quán)限
- -r 檢查該文件是否存在且具有可讀的權(quán)限
- -w 檢查該文件是否存在且具有可寫的權(quán)限
- -x 檢查該文件是否存在且具有可執(zhí)行的權(quán)限
- -u 檢查該文件名是否存在且具有SUID的屬性
- -g 檢查該文件名是否存在且具有SGID的屬性
- -k 檢查該文件名是否存在且具有Sticky bit的屬性
- -s 檢查該文件是否存在且為非空文件
- 兩個(gè)文件之間比較
- -nt 判斷file1 是否比 file2 新
- -ot 判斷file1 是否比 file2 舊
- -ef 判斷兩個(gè)文件是否為同一個(gè)文件
- 整數(shù)之間的判斷
- -eq 兩數(shù)值相等(equal)
- -ne 兩數(shù)值不等(not equal)
- -gt n1大于n2(greater than)
- -lt n1小于n2(less than)
- -ge n1大于等于n2(greater than or equal)
- -le n1小于等于n2(less than or equal)
- 判斷字符串
- test -z string 判斷字符串是否為空?若 string 為空字符串,則為 true
- test -n string 判斷字符串是否非空?若 string 為空字符串,則為 false
- test str1 = str2 判斷str1是否等于str2,若相等,則返回 true
- test str1 != str2 判斷str1是否不等于str2,若相等,則返回 false
實(shí)例(判斷文件類型宵凌,顯示其權(quán)限):
#!/bin/bash
# Program:
# User input a filename, program will check
# 1. 輸入文件名鞋囊,并判斷輸入存在
echo -e "Please input a filename, I will check the filename's type and \ permission. \n\n"
read -p "Input a filename : " filename
test -z $filename && echo "You MUST input a filename." && exit 0
# 2. 判斷文件是否存在?不存在結(jié)束腳本
test ! -e $filename && echo "The filename '$filename' DO NOT exist" && exit 0
# 3. 判斷文件類型及屬性
test -f $filename && filetype="regulare file"
test -d $filename && filetype="directory"
test -r $filename && perm="readable"
test -w $filename && perm="$perm writable"
test -x $filename && perm="$perm executable"
# 4. 顯示文件信息
echo "The filename: $filename is a $filetype"
echo "And the permissions are : $perm"
1.6、判斷符號(hào)[]
- [ 判斷條件 ] 兩端留有空格
“-o”表示兩者條件滿足其一即可
“-a”表示兩者都得滿足瞎惫。
實(shí)例:
#!/bin/bash
#This program shows the user's choice
read -p "Please input (Y/N): " temp
[ "$temp" == "Y" -o "$temp" == "y" ] && echo "OK, continue" && exit 0
2溜腐、shell script參數(shù)
2.1、shell script 默認(rèn)參數(shù)
如:調(diào)用語(yǔ)句如下
./shell.sh con1 con2 con3 con4
$0為./shell.sh $1為con1 $2為con2 $3為con3 $4位con4
實(shí)例:
#!/bin/bash
echo "The script name is ==> $0"
echo "Total parameter number is ==> $#"
[ "$#" -lt 2 ] && echo "The number of parameter is less than 2.Stop here." && exit 0
echo "Your whole parameter is ==> '$@'"
echo "The 1st parameter ==> $1"
echo "The 2nd parameter ==> $2"
運(yùn)行界面:
[zkpk@node05 test_linux]$ ./p4.sh 1 2
The script name is ==> ./p4.sh
Total parameter number is ==> 2
Your whole parameter is ==> '1 2'
The 1st parameter ==> 1
The 2nd parameter ==> 2
2.2瓜喇、參數(shù)偏移shift
實(shí)例解釋:
./p5.sh one two three four five six
#!/bin/bash
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
#shift一個(gè)變量
shift
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
shift 3 #shift三個(gè)變量
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
運(yùn)行結(jié)果:
[zkpk@node05 test_linux]$ ./p5.sh one two three four five six
Total parameter number is ==> 6
Your whole parameter is ==> 'one two three four five six'
Total parameter number is ==> 5
Your whole parameter is ==> 'two three four five six'
Total parameter number is ==> 2
Your whole parameter is ==> 'five six'
使用shift后挺益,變量位置發(fā)生偏移,在第一次shift一個(gè)變量后乘寒,變量$1從one變成了two望众。以此類推。