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



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