一、變量
1、linux大小寫敏感,變量取名要注意大小寫。可以通過變量名前面加$來訪問變量的內容。可以通過使用read命令來將用戶輸入的值賦給一個變量。
2、給變量賦值時,如果字符串中包含空格,就必須用引號把他們引起了,還要注意在等號兩邊不能有空格。
3、變量在雙引號中會用變量值替換,而在單引號中就不會替換,也可以通過轉義字符\來取消$的特殊含義。
例:myvar=“Hi there!”
echo $myvar
echo "$myvar"
echo ' $myvar'
echo \$myvar
將會輸出如下:Hi there!
Hi there!
$myvar
$myvar
4、環境變量:環境變量通常用大寫字母做名字,為了與環境變量區別開來,用戶自定義變量一般都用小寫字母。
常用的環境變量有:
二、控制結構
1、shell的布爾判斷命令[或test。test的三種條件類型:字符串比較、算術比較和文件有關的條件測試。
2、控制結構
Ø if語句:
if condition
then
statements
else
Statements
Fi
例:#!/bin/sh
if [ -f /root/cherie_test/test_path.sh ];then
echo "/root/cherie_test/test_path.sh exists"
fi
if [ -d /root/cherie_test/test_path.sh ];then
echo "/root/cherie_test/test_path.sh is a director"
else
echo "/root/cherie_test/test_path.sh is not a directory"
fi
解析:[ ]前后都要有空格,不然會報[: missing `]'錯誤;if與[之間也需要有空格,沒有的話會報syntax error near unexpected token `then'錯誤。
Ø elif語句。對if語句的進一步測試。
例:#!/bin/sh
echo "Is it morning? Please answer yes or no "
read timeofday
if[ $timeofday = "yes"]; then
echo "Good morning"
exit 0
elif [ $timeofday = "no" ];then
echo "Good afternoon"
exit 0
else
echo "Sorry,$timeofday not recognized. Enter yes or no "
exit 1 //異常退出
fi
解析:elif會對在第一個if條件不滿足的情況下進行進一步測試,如果兩次測試的結果都不成功,就打印出一條錯誤信息並以1為退出碼退出。
Ø for 語句。語法格式:for variable invalues
do
Statements
done
例:#!/bin/sh
for file in $(ls f*.sh); do
lpr $file
done
exit0
解析:打印當前目錄中所有以字母f開頭的腳本文件。for的參數來着$()中的命令的輸出結果,shell擴展f*.sh給出所有匹配此模式的文件的名字。此例中可能會報錯lpr: error - scheduler not responding!這是vim配置問題。
Ø while 語句。語法格式: while condition do
Statements
Done
例:#!/bin/sh
foo=1
whlie [ "$foo" -le 20 ]
do
echo "Here we go again"
foo=$(($foo+1))
done
exit 0
解析:測試foo的值,如果它小於20就執行循環體,-le表示小於。
算表達式的使用: count=1
count=$[${count} + 1] 變量加1
Ø until語句。語法格式:until condition
do
Statements
Done
它與while循環很相似,只是把條件測試反過來,循環將執行直達條件為真為止,而不是條件為真時反復執行。
Ø case 語句。語法格式case variable in
pattern statements;;
pattern statements;;
...
esac
注意,每個模式行都以雙分號結尾。
例:#!/bin/sh
echo "Is it morning?Please answer yes or no"
read timeofday
case "$timeofday" in
yes|y|Yes|YES)
echo "Good morning"
echo "Up bright and early this morning"
;;
n*|N*) echo "Good afternoon";;
*) echo "Sorry ,answer not recognized";;
esac
exit 0
解析:case語句被執行時,會把timeofday的內容與各個字符串依次進行比較。一旦某個字符串輸入匹配成功,case命令就會執行緊隨右括號后面的代碼。case命令會對用來做比較的字符串就行正常的通配符擴展,因此可以指定字符串的一部分在其后加上*通配符,如n*;只使用一個單獨的*表示匹配任何可能的字符串。
三、函數
1、函數的定義。我們只需簡單的寫出它的名字,然后是一對空括號,再把有關的語句放在一對花括號中,如:function_name () {
Statements
}
例:#!/bin./sh
foo () {
echo "Function foo is executing"
}
echo"script starting"
foo
echo "script ended"
exit 0
運行結果如下: script starting
Function foo is executing
script ended
解析:當遇到foo()結構時,它知道定義了一個名為foo的函數。當執行到foo行時,shell就知道應該去執行剛才定義的函數。
注:在調用一個函數之前必須先對它進行定義。
四、命令
Ø break 命令。終止循環
Ø :命令。冒號(:)命令是一個空命令。它偶爾會被用於簡化條件邏輯,相當於true的一個別名。由於它是內置命令,所以它運行的比true快,但它的輸出可讀性較差。
Ø continue命令。使for、while或until循環跳到下一次循環繼續執行。continue可以帶一個可選的參數以表示希望繼續執行的循環嵌套層數,也就是說你可以部分的跳出嵌套循環。
Ø .命令。點(.)命令用來執行當前shell中的命令。
Ø echo命令。使用echo命令來輸出結尾帶有換行符的字符串。 常用 echo -n來去掉換行符。
Ø eval命令。eval命令允許你對參數進行求值,有點像一個額外的$。
Ø exec命令。將當前shell替換為一個不同的程序,腳本程序中exec命令后面的代碼都不會執行。
Ø exit n命令。exit命令使腳本程序以退出碼n結束運行。,退出碼0表示成功,退出碼1~125是腳本程序使用的錯誤代碼。
Ø export命令。export命令將作為它參數的變量導出到子shell中,並使之在子shell中有效。在默認情況下,在一個shell中被創建的變量在這個shell調用的下級(子)shell中是不可用的。export命令把自己的參數創建為一個環境變量,而這個環境變量可以被其他腳本和當前程序調用的程序看見。
例:腳本export 2
腳本export1
第一個空行的出現是因為變量foo在export2中不可用,所以$foo被賦值為空,echo一個空變量將輸出一個空行。Bar用export聲明后在export1中仍然有效。
Ø expr命令。expr命令將它的參數當作一個表達式來求值。
Ø printf命令。語法:printf “format string” paremeter1 paremeter2
它支持的轉義序列:
Ø return命令。return命令的作用是使函數返回。
Ø set命令。set命令的作用是為shell設置參數變量。還可以通過set命令和它的參數來控制shell的執行方式。其中最常用的命令格式是set -x,它讓一個腳本程序跟蹤顯示它當前執行的命令。
Ø shift命令。shift命令把所有參數變量左移一個位置,使$2變成$1,$3變成$2,依此類推。
Ø trap命令。用於指定在接收到信號后將要采取的行動。trap命令的參數分為兩部分,前一部分是接收到指定信號時將要采取的行動,后一部分是要處理的信號名,trap command signal。
Ø unset命令。unset命令的作用是從環境中刪除變量或函數。
Ø find 命令。查找文件的功能。語法格式:find [path] [option] [tests] [actions]
一些常用的選項:
測試部分,可以提供給find命令的測試非常多,每種測試返回的結果有兩種可能:true或false。find命令開始工作時,它按照順序將定義的每種測試依次應用到它搜索到的每個文件上。
我們還可以用操作符來組合測試。大多數操作符有兩種格式:短格式和長格式,
常見的動作:
Ø grep命令。使用grep命令在文件中搜索字符串。grep語法格式:grep[option] pattern [FILES] 如果沒有文件名,則搜索標准輸入。
grep命令的一些主要選項:
五、正則表達式
特殊字符:
如果你想將上述字符用作普通字符,就需要在它們前面加上\字符。所以,如果你想使用$字符,只需要簡單的將它寫為\$。
在方括號中還可以使用一些有用的特殊匹配模式,
匹配字符:
跟蹤腳本程序中復雜錯誤的主要方法是設置各種shell選項。為了完成這一任務,你可以在調用shell時加上命令行選項,各種shell選項: