《Linux 九》 Shell 講解

來源:互聯網
上載者:User

課程大綱 『
 Shell編程文法
 Shell指令碼調試
 Shell應用執行個體

一個簡單的shell程式
 shell結構 :
  1. #!指定執行指令碼的shell
  2. #注釋行
  3. 命令和控制結構
建立shell程式的步驟:
 第一步 : 建立一個包含命令和控制結構的檔案。
 第二步 : 修改這個檔案的許可權使它可以執行。
          使用chmod u+x
 第三步 : 執行 ./example
         (也可以使用“sh example”執行)
Shell變數
 變數 : 是shell傳遞資料的一種方法,用來代表每個取值的符號名。
 Shell有兩類變數 : 臨時變數 和 永久變數。
 臨時變數是shell程式內部定義的,其使用範圍僅限於定義它的程式,對其它程式不可見。包括:使用者自訂變
  量、位置變數。永久變數是環境變數,其值不隨shell指令碼的執行結束而消失。
使用者自訂變數
 使用者定義的變數由字母或底線開頭,由字母、數字或底線序列組成,並且大小寫字母意義不
 同。變數名長度沒有限制。在使用變數值時,要在變數名前加上首碼“$”。
設定和使用變數
 設定變數 : 習慣上用大寫字母來命名變數。變數名只能以字母表中的字元開頭,不能用數字。
 變數賦值 : 賦值號“=”兩邊應沒有空格。定義時賦值,如 NUM = 1 將一個命令的執行結果賦給變數,如:TIME=`date`
     將一個變數賦給另一個變數,如:A =$B使用echo命令查看變數值。例如:echo $A
 列出所有的變數:
  # set
  包含多個字的變數:
    $NAME=Mike Ron
            運行時出錯,應改為 : $NAME=“Mike Ron” 或 $NAME=‘Mike Ron’
 單引號和雙引號的區別 :
  # $ABC=‘$NAME Junior’
  # echo $ABC
  $NAME Junior
  單引號之間的內容原封不動地指定給了變數。
  刪除變數 : # unset NAME
位置變數和特殊變數
 Shell解釋執行使用者命令時,將命令列的第一個部分作為命令名,其它部分作為參數。由出現
  在命令列上的位置確定的參數稱為位置參數。
 例如 : ls -l file1 file2 file3
        $0 這個程式的檔案名稱 ls -l
        $n 這個程式的第n個參數值,n=1-9
特殊變數
 $* 這個程式的所有參數
 $# 這個程式的參數個數
 $$ 這個程式的PID
 $! 執行上一個後台命令的PID
 $? 執行上一個命令的傳回值
Shell命令
 *1 read命令 : 從鍵盤讀入資料,賦給變數 如 : read USERNAME
    read 的例子:
     #! /bin/sh
     read first second third
     echo "the first parameter is $first"
     echo "the second parameter is $second”
     echo "the third parameter is $third"
expr 命令
 Shell變數的算術運算:
  expr命令:對整數型變數進行算術運算
  例如 : expr 3 + 5
         expr $var1 - 5
         expr $var1 / $var2
         expr $var3 \* 10
 複雜的expr命令
   複雜的運算:
     expr `expr 5 + 7`/$var4
   將運算結果賦予變數:
     var4=` expr $var1 / $var2 `
   expr 命令

#!/bin/sh    a=10    b=20    c=30    value1=`expr $a + $b + $c`    echo "The value of value1 is $value1"    value2=`expr $c / $b`    echo "The value of value2 is $value2"    value3=`expr $c \* $b`    echo "The value of value3 is $value3"    value4=`expr $a + $c / $b`    echo "The value of value4 is $value4“

變數測試語句
  變數測試語句:用於測試變數是否相等、 是否為空白、檔案類型等。
  格式 : test 測試條件
  測試範圍 : 整數、字串、檔案
 *1 字串測試:
   test str1=str2 測試字串是否相等
   test str1!=str2 測試字串是否不相等
   test str1 測試字串是否不為空白
   test -n str1 測試字串是否不為空白
   test -z str1 測試字串是否為空白
 *2 整數測試:
   test int1 -eq int2 測試整數是否相等
   test int1 -ge int2 測試int1是否>=int2
   test int1 -gt int2 測試int1是否>int2
   test int1 -le int2 測試int1是否<=int2
   test int1 -lt int2 測試int1是否<int2
   test int1 -ne int2 測試整數是否不相等
 *3 檔案測試:
   test -d file 指定檔案是否目錄
   test -f file 指定檔案是否常規檔案
   test -x file 指定檔案是否可執行
   test -r file 指定檔案是否可讀
   test -w file 指定檔案是否可寫
   test -a file 指定檔案是否存在
   test -s file 檔案的大小是否非0
 變數測試語句一般不單獨使用,一般做為if語句的測試條件,如:
  if test -d $1 then
    ...
  fi
 變數測試語句可用[]進行簡化,如
  test -d $1 等價於 [ -d $1 ]

#!/bin/sh if [ $# -ne 2 ]; then echo "Not enough parameters" exit 0 fi if [ $1 -eq $2 ]; then echo "$1 equals $2" elif [ $1 -lt $2 ]; then echo "$1 littler than $2" elif [ $1 -gt $2 ]; then echo "$1 greater than $2" fi

流量控制語句
 流量控制語句 : 用於控制shell程式的流程
 exit語句 : 退出程式執行,並返回一個返回碼,返回碼為0表示正常退出,非0表示非正常退出。
 例如:exit 0

 *1  if 的使用
  if ...then ...fi語句, 例如 :

#!/bin/sh   if [ -x /etc/rc.d/init.d/httpd ]    then   /etc/rc.d/init.d/httpd restart  fi

*2 更複雜的if語句 :
  if 條件1 then
   命令1
  elif 條件2 then
   命令2
  else
   命令3
 fi

 *3 多個條件的聯合:
  -a : 邏輯與,僅當兩個條件都成立時,結果為真。
  -o : 邏輯或,兩個條件只要有一個成立,結果為真。

 *4 for...done語句
  格式:for 變數 in 名字表
  do
  命令列表
  done
 例子:

 #!/bin/sh for DAY in Sunday Monday Tuesday Wednesday  Thursday Friday Saturday do  echo "The day is : $DAY" don

 *5 select 變數 in 關鍵字
 do
  command 1
  ... ...
  command n
 done
 select把關鍵字中的每一項做成類似表單,以互動的方式執行do和done之間的命令。

 *6 case...esac語句,格式:
  case 變數 in
        字串1) 命令列表1
           ;;
        ...
        字串n) 命令列表n
           ;;
 esac
 *7 while語句,格式: 

 while 條件   do    命令   done #! /bin/sh num=1 while [ $num -le 10 ] do   SUM=`expr $num \* $num`   echo $SUM   num=`expr $num + 1` done

*8 until語句,格式:
  until 條件
  do
   命令
  done
  until類似while迴圈,不同的是until是條件傳回值為假時才繼續執行

 *9 跳出迴圈:break和continue
   break : 跳出整個迴圈
   continue : 跳過本次迴圈,進行下次迴圈
 *10
   shift指令:參數左移,每執行一次,參數序列順次左移一個位置,$#的值減1,
   用於分別處理每個參數,移出去的參數不再可用

 *11 函數的定義:
  函數名 ()
  {
   命令序列
  }
  函數的調用:不帶()
   函數名 參數1 參數2 ...
 *12 函數中的變數:
  變數均為全域變數, 沒有局部變數
  函數中的參數 : 調用函數時,可以傳遞參數,在函數中用$1、$2...來引用

 *13  sh -x script
  這將執行該指令碼並顯示所有變數的值。
   sh -n script
  不執行指令碼只是檢查文法的模式,將返回所有語法錯誤。
 *14 awk命令應用
      awk -F 域分隔字元 ‘命令’
   樣本 :
     1、檢測系統中UID為0的使用者
            awk -F: '$3==0 {print $1}' /etc/passwd
     2、檢測系統中密碼為空白的使用者
            awk -F: 'length($2)==0 {print $1}' /etc/shadow
 知識點總結
  掌握Shell編程的基本文法
  掌握結合系統命令編寫應用指令碼
  掌握Shell編程調試命令

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.