shell的一些基礎東西(流程控制等。。。)

爲什麼學習腳本

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稍有不同.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章