主要的學習內容包含基本思路,語法:變量、條件判斷和程序控制,命令列表,函數,命令及執行,調試,grep命令和正則表達式,find命令linux
適用編寫執行相對簡單任務的小工具。
linux系統中,標準shell是GNU工具集中bash(GNU Bourne—Again Shell)。查看bash版本號正則表達式
/bin/bash --versionshell
把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判斷什麼時候輸入完畢並執行腳本程序
/# !後面的參數指的是用來執行本文件的程序。
/bin/sh first
chmod +x first first(shell的環境變量PATH爲要在當前目錄下查找要執行的命令)或者./first(建議使用)
特色是
例子 引號以及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 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
命令列表
將幾條命令鏈接成一個序列,執行某個語句以前同時知足好幾個條件
AND列表
state1 && state2 && state3
從左到右順序執行每條命令,只有前一條返回true,它下一條命令才執行。
state1 || state2 || state3
function_name() {
statements
}
break:用於跳出當前循環,只跳出一層循環
:命令是一個空命令,用來簡化邏輯,至關於true的別名。
while :至關於 while true
: ${var:=value}
export 命令
一旦一個變量被shell導出,它能夠被該shell調用的任何腳本使用,也能夠被後續依次調用的任何shell使用
將它的參數看成一個表達式來求值 能夠用$()來替換
printf 命令
set命令
做用爲爲shell腳本設置參數變量。
shift
把全部參數變量左移一個位置,使$2變成$1
下面代碼實現依次掃描全部的位置參數
\#!/bin/sh while [ "$1" != "" ]; do echo "$1" shift done exit 0
例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的參數,它被當前文件的完整路徑取代。