shell程式設計(3)shell文法函數
要定義一個shell函數,我們只需要簡單地寫出它的名字,然後是一對空括弧,再把有關的語句放在一對花括弧中,如下所示:
function_name(){
statements
}
實驗:簡單的函數
#!/bin/bash
foo(){
echo“Function foo is executing”
}
echo “script starting”
foo
echo “script ended”
exit 0;
輸出:
script starting
Function foo is executing
script ended
當一個函數被調用時,指令碼程式的位置參數$*、$@、$1、$2等會被替換為函數的參數。這也是你讀取傳遞給函數的參數的辦法。當函數執行完畢後,這些參數會恢複為它們先前的值。
可以使用local關鍵字在shell函數中聲明局部變數,局部變數將局限在函數的作用範圍內。
實驗:從函數中返回一個值
指令碼程式:
#!/bin/sh
yes_or_no(){
echo "IS your name $*?"
while true
do
echo -n "Enter yes or no:"
read x
case "$x" in
y | yes ) return 0;;
n | no ) return 1;;
* ) echo "Answer yes of no"
esac
done
}
echo "original parameters are $*"
if yes_or_no "$1"
then
echo "ho $1, nice name"
else
echo "Never mind"
fi
exit 0
執行與輸出結果
root@ubuntu:/home/chen123/C++# ./a RickNeil
original parameters are Rick Neil
IS your name Rick?
Enter yes or no:yes
ho Rick, nice name
命令
break命令: 跳出for、while或until迴圈
:命令:空命令,相當於true的一個別名
continue命令: 使for、while或until迴圈跳到下一次迴圈繼續執行
.命令:用來執行當前shell中的命令
echo命令:輸出結尾帶分行符號的字串
eval命令:允許對參數進行求值
exec命令:典型用法是將當前shell替換為一個不同的程式。第二中用法非常少見,就是修改當前檔案描述符
exit n命令:使指令碼程式退出碼n結束運行。
export命令:將作為它參數的變數匯出到子shell中,並使之在shell中有效。
expr命令:將它的參數當做一個運算式來求值
printf命令:格式化輸出
return命令:使函數返回
set命令:為shell設定參數變數
shift命令:把所有參數變數左移一個位置,使$2編程$1,$3編程$2,一次類推。原來$1的值被丟棄。
trap命令:用於指定在接收到訊號後將要採取的行動
unset命令:從環境中刪除變數或函數
find命令
功能:尋找檔案
簡單的例子:用find在本地機器上尋找名為wish的檔案
$ find/ -name wish –print
/usr/bin/wish
這個命令執行需要花很長的時間,如果linux掛載了一大塊windows機器的檔案系統,還會搜尋掛載的目錄。
可以使用-mount選項,告訴find命令不要搜尋掛載的目錄。
$find / -mount –name -wish –print
/usr/bin/wish
find命令的完整文法格式如下所示:
find [path][options][tests][actions]
grep命令
功能:在檔案中搜尋字串
文法:
grep [options] PATTERN [FILES]
root@ubuntu:/home/chen123/C++# grep -chello hello.c
1
輸出hello在hello.c中匹配行的數目
here文檔
here文檔以連續的小於符號<<開始,緊跟著一個特殊的字元序列,該序列將在文檔的結尾處再次出現。<<是shell的標籤重新導向符號,此時,它表示命令輸入的是一個here文檔。
例子:
#! /bin/sh
cat << !FUNKY!
hello
this is a here
document
!FUNKY!
執行與輸出
root@ubuntu:/home/chen123/C++# ./b
hello
this is a here
document