Linux shell 程序設計

shell 程序設計

主要的學習內容包含基本思路,語法:變量、條件判斷和程序控制,命令列表,函數,命令及執行,調試,grep命令和正則表達式,find命令linux

什麼是shell

適用編寫執行相對簡單任務的小工具。
linux系統中,標準shell是GNU工具集中bash(GNU Bourne—Again Shell)。查看bash版本號正則表達式

/bin/bash --versionshell

管道和重定向

  • 重定向輸出> ls -1 > lsoutput.txt

把ls命令的輸出保存到文件lsoutput.txt中
其中參數 -1表明文件描述符,0表明程序的標準輸入,1表明標準輸出,2表明錯誤輸出。> 把標準輸出重定向到一個文件,覆蓋已經有的文件瀏覽器

ps >> lsoutput.txtbash

其中>>表示把輸出內容附加到文件後編輯器

把標準輸出和標準錯誤輸出都重定向到一個文件中,用>&來結合兩個輸出函數

kill -1 1234 >killouterr.txt 2>&1工具

  • 管道

利用管道操做符|來鏈接進程。經過管道鏈接的進程能夠同時運行,而且隨着數據流在它們之間的傳遞能夠自動的進行協調學習

ps -xo comm | sort | uniq | grep -v sh |more測試

這一命令按照字母順序排序ps命令的輸出,接着用uniq去除相同名字的進程,而後用grep -v sh刪除sh的命令,最後將結果顯示在屏幕上。

程序設計語言的shell

  • 交互式程序

即在命令行上直接輸入shell腳本。要繼續輸入時$就變成了>,由shell判斷什麼時候輸入完畢並執行腳本程序

  • 建立腳本
  1. 用文本編輯器建立一個腳本 first2. 運行腳本的方式有兩種
  • /# !後面的參數指的是用來執行本文件的程序。

  • /bin/sh first

  • chmod +x first first(shell的環境變量PATH爲要在當前目錄下查找要執行的命令)或者./first(建議使用)

shell的語法

變量

特色是

  1. 使用時不須要作出聲明,使用時同時建立。
  2. 區分大小寫
  3. 經過在變量名前加$來訪問。而後經過echo來顯示。

例子 引號以及read的使用 variable

# !bin/sh

myvar="Hi there"

echo $myvar echo "$myvar" echo '$myvar' echo $myvar

read myvar echo $myvar

輸出爲 Hi there Hi there $myvar $myvar

在變量前面加$能顯示變量的內容,使用雙引號不影響變量的替換,使用單引號和\不進行變量的替換,用read從用戶處讀入一個字符串。

環境變量

$HOME : 當前目錄的家目錄
$PATH: 用冒號分隔用來搜索命令的目錄列表
$PS1:
$0:腳本名字
$#:傳遞給腳本的參數個數
$$:腳本的進程號
$1,2,3:腳本的參數

條件

  • test []:shell的布爾判斷命令

    if [-f fred.c]

    then
    
    .....
    
    fi
  • test 可使用的條件類型:字符串比較,算術比較和文件有關的測試

-d file :文件是否爲目錄
-e:存在
-f:普通文件

控制結構

  • if then elif then fi.

``if condition

then

statements

elif

statements

else

statements

fi
  • for .. in .. do done

  • while do done

    #!/bin/sh

    echo "password"

    read password

    while [ "$password" != "secret" ]

    do

    echo "sorry,try again"

    read password

    done

    exit 0

  • 經常使用寫法 while [ ]; do

  • until

until ..do :循環根據就不須要執行採用util,至少執行一次採用while

  • case

  • 命令列表

將幾條命令鏈接成一個序列,執行某個語句以前同時知足好幾個條件

  1. AND列表
    state1 && state2 && state3
    從左到右順序執行每條命令,只有前一條返回true,它下一條命令才執行。

  2. state1 || state2 || state3

函數

function_name() {

statements
}

命令

  • break:用於跳出當前循環,只跳出一層循環

  • :命令是一個空命令,用來簡化邏輯,至關於true的別名。

    while :至關於 while true
    : ${var:=value}

  • .命令
    ../shell_script 用於在當前shell中執行命令
  • eval 命令
    像個額外的$,給出一個變量值的值
  • exec命令
    將當前shell替換爲一個不一樣的程序
  • export 命令
    一旦一個變量被shell導出,它能夠被該shell調用的任何腳本使用,也能夠被後續依次調用的任何shell使用

linux

  • expr 命令

將它的參數看成一個表達式來求值 能夠用$()來替換

  • printf 命令

  • set命令
    做用爲爲shell腳本設置參數變量。

  • shift

把全部參數變量左移一個位置,使$2變成$1
下面代碼實現依次掃描全部的位置參數

\#!/bin/sh
while [ "$1" != "" ]; do
    echo "$1"
    shift
done 
exit 0
  • trap命令
    用於指定在接收到信號後要採起的行動。
    用法: trap command signal
    command:接收到信號後要採起的行動。
    signal:要處理的信號名。
  • unset命令
    用於從環境中刪除變量或函數。

正則表達式極其相關的命令

  • find 命令
    find的完整語法格式:
    find [path] [options] [tests] [actions]
    path :能夠選擇絕對路徑也能夠選擇相對路徑。
    使用操做符和圓括號的find命令
    好比在當前目錄下找出文件中比test_for 更新而且以test_爲後綴的文件

例1.

find . \( -name "test_*" -and -newer test_for \) -type f -print

命令解釋:用\轉義(),由於()在shell裏面有特殊含義,用-and來鏈接兩個測試(-or 或 -not )

例2.

find . -newer test_for -type f -exec ls -l {} \;

命令解釋:-exec 執行一條命令,讀取參數直到;爲止,{}是-exec的參數,它被當前文件的完整路徑取代。

  • gerp命令 grep(General Regular Expression Parser ) find 用來在系統中搜索文件,而grep命令在文件中搜索字符串。 grep [options] PATTERN [FILES]
相關文章
相關標籤/搜索