爲什麼學習腳本
4.4.2 腳本的執行
1.將文件改爲可以執行的屬性即x屬性,然後執行改文件
2.文件後綴名爲.sh,用sh來執行
"和'最大的不同在於能不能保存變量內容,單引號裏的內容都將變成單純的字體,而不是特殊的字體.
4.4.3 卷標與運算符declare
不定義變量,那麼該變量是呈現字符串的形式,所以任何變量都是字符串
number1=2*3+5*13-32+25
declare number2=2*3+5*13-32+25
在最後輸出結果時,$number1爲2*3+5*13-32+25,而number2爲64
4.4.4 交互式腳本
最簡單的交互式指令是read指令,read功能就是將鍵盤上輸入的內容放到變量中.
eg:[root@test test]# read name
VBird
[root@test test]# echo $name
VBird
怎麼樣定義腳本的參數代號
[root@test test]myscript. opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
從上面的例子可以看出,只要變量名稱爲$0,就表示爲myscript也就是說 :
$0:myscript. 亦即腳本的文件名
$1:opt1,亦即第一個附加參數
$2:opt2,
$3:opt3
eg:
root@wwwvbird_shells]# cat parm.sh
#!/bin/bash
echo "This script's nmae => $0"
echo "parameters $1 $2 $3"
[root@www vbird_shells]# sh parm.sh hello1 hello2 hello3
This script's nmae => parm.sh
parameters hello1 hello2 hello3
4.4.5 腳本邏輯判斷式與表達式
邏輯判斷式:
關於文件目錄:
-f 常用!檢測文件是否存在
-d 常用!檢測目錄是否存在
-b 檢測是否爲一個block文件
-c 檢測是否爲一個character文件
-S 檢測是否爲一個socket標籤文件
-L 檢測是否爲一個符號鏈接文件
-e 檢測某個東西是否存在!可以是任何東西.
關於程序
-G 檢測是否由GID所執行的程序擁有
-O 檢測是否由UID所執行的程序擁有
-p 檢測是否爲程序間傳送信息的name pipe 或FIFO
關於文件的屬性的檢測
-r 是否爲可讀
-w 是否爲可寫
-x 是否爲可執行
-s 是否爲非空白文件
-u 是否具有SUID屬性
-g 是否具有SGID屬性
-k 是否具有sticky bit 屬性
兩個文件之間的判斷比較
-nt 第一個文件比第二個文件新
-ot 第一個文件比第二個文件舊
-ef 第一個文件與第二個文件爲同一個文件(如鏈接文件)
與或非
&& 邏輯與
|| 邏輯或
運算符:
= 等於
!= 不等於
< 小於
> 大於
-eq 等於
-ne 不等於
-lt 小於
-gt 大於
-le 小於或等於
-ge 大於或等於
-a 雙方都成立(and)
-o 單方成立(or)
-z 空字符串
-n 非空字符串
4.4.6 條件判斷
4.4.6.1 if then fi
if [ 條件一 ] &&(||) [ 條件二 ]; then
elif [ 條件三 ] &&(||) [ 條件四 ]; then
else
fi
這裏有強調的是
1.在[]中。只能有一個判斷式
2.在[]和[]中,可以使用&&或||結合判斷式
3.每一個獨立的組件之間需要用空格鍵隔開
4.4.6.2 case .. esac
語法:
case 種類方式(string) in
種類式一)
程序執行段
;;
種類式二)
程序執行段
;;
*)
echo "Usage: {種類方式一|種類方式二}"
exit 1
esac
種類方式(string)的格式有兩種:
直接輸入與交互式(先read 變量名,在用$變量名)
4.4.6.3 循環
for:
for((條件1;條件2;條件3))
eg:
[root@www vbird_shells]# cat for.sh
#!/bin/bash
declare -i s
for ((i=1; i<=100;i=i+1))
do
s=s+i
done
echo "The count is ====> $s"
for variable in variable1 variable2 ...
root@wwwvbird_shells]# cat foruser.sh
#!/bin/bash
account=`cut -d ":" -f1 /etc/passwd |sort`
echo "The following is your linux server's account "
for i in $account
do
echo $i
done
while:
[root@www vbird_shells]# cat while.sh
#!/bin/bash
declare -i i
declare -i s
while [ "$i" != "101" ]
do
s=s+i
i=i+1
done
echo "The count is ====> $s"
until:
[root@www vbird_shells]# cat unitl.sh
#!/bin/bash
echo "Press Y/y to stop"
until [ "$yn" = "Y" ] || [ "$yn" = "y" ]
do
read yn
done
4.4.6.3 調試腳本
#sh [-nvx] scripts
-n :不執行腳本,查詢腳本內的語法,若有錯則列出
-v :在執行腳本之前,先將腳本的內容輸出在屏幕上
-x :將用到的腳本內容顯示在屏幕上,與-v稍有不同.