【Shell編程】Shell程序設計

一、Shell簡介

  做爲Linux靈感來源的Unix系統最初是沒有圖形化界面的,全部的任務都是經過命令行來實現的。所以,Unix的命令行系統獲得了很大的發展,逐步成爲一個功能強大的系統。正則表達式

  Shell是一個應用程序,它是用戶與Linux系統的接口,容許用戶向操做系統輸入須要執行的命令,有點相似於Windows的命令提示符,但功能更增強大。shell

  Shell對Linux系統的重要性不言而喻,它適合於比較簡單的小任務,更加關注的是易於配置和維護,所以執行效率每每不是很高。Shell能夠用來執行命令,調用Linux工具,還能夠執行程序。Shell能夠執行Shell程序,一般稱爲Shell腳本,在運行時解釋執行,這就是Shell和Shell腳本的關係。編程

  Linux系統中有各類不一樣的Shell,可是默認狀況下,咱們默認老是做爲/bin/sh安裝的標準shell是GNU工具中的bash,bash開源而且可移植,被普遍使用。bash

二、管道和重定向

(1)重定向輸出

$ ls -l > output.txt  # 將ls的輸出直接保存到文件中  >
$ ps >> output.txt # 輸出內容追加到文件末尾 >>

(2)重定向輸入

$ more < input.txt # 重定向標準輸入
$ more  input.txt # more自己也接收文件參數

(3)管道

  管道能夠用來鏈接多個進程(數量沒有限制),其操做符是 | ,經過管道鏈接的進程能夠同時運行,而且數據流能夠在他們之間自動協調的進行傳遞。編輯器

  注意一點:當使用管道執行一系列的命令時,若是使用重定向輸出,相應的輸出文件是在這一組命令被建立的同時當即被建立或者寫入的,因此絕對不要在命令流中使用相同的文件名,不然會獲得一個空文件。工具

$ ps | sort > output.txt # 對當前進程排序輸出
$ ps | sort | more # ps的輸出排序,而後一次顯示一屏
$ ps -xo comm | sort | uniq | grep -v sh | more # 按字母順序排序ps的輸出,而後uniq取出名字相同的進程,而後用grep -v sh刪除名爲sh的進程,最終將結果分頁顯示在屏幕上
$ cat data.txt | sort | uniq > data.txt # 錯誤,會獲得一個空文件

三、做爲程序設計語言的Shell

(1)交互式程序

  在命令行上直接輸入shell程序是一種簡單方式,能夠用來測試短小的代碼段,方便快捷,更重要的是方便進行測試,這稱爲交互式腳本。可是每次要執行命令時,都要進行命令的輸入,很繁瑣,因此除了簡單的測試通常狀況下不會使用這種方法。測試

(2)建立腳本

  建立一個非交互式腳本是咱們一向的作法,這就是Shell編程。shell腳本有其獨特的優點和用武之地,歸納爲如下幾點:(1)無需編譯,解釋執行;(2)以文本文件的形式存在;(3)有強大的正則表達式操做;(4)速度相對較慢,數據類型少;(5)主要用於系統管理和文件操做。操作系統

  建立並運行一個shell腳本過程以下:命令行

  • 文件編輯。用文本編輯器建立文件,進行編輯,Linux並不以擴展名區分文件類型,可是通常爲了直觀,能夠命令爲以.sh爲後綴的格式。設計

    #!/bin/sh
    for file in *
    do
      if grep -l POSIX $file # 匹配文件名包含POSIX的文件
      then
          echo $file
      fi
    done
    exit 0
  • 把腳本設置爲可執行。文件建立完成後,簡單方法是直接調用,好比$ /bin/sh first.sh,這能夠運行,可是更經常使用的方法是改變文件權限爲可執行,而後直接運行。

    $ chmod +x first.sh # 改變權限爲可運行
    $ first.sh # 直接運行
相關文章
相關標籤/搜索