第六章 shell函數
1.定義函數
funcation name()
{
command1
....
}
或
函數名()
{
command1
...
}
eg.shell
#!/bin/bash
#hellofun
function hello()
{
echo "hello,today is `date`"
return 1
}bash
2.函數調用
#!/bin/bash
#hellofun
function hello()
{
echo "hello,today is `date`"
return 1
}
echo "now going to the function hello"
hello
echo "back from the function"
因此調用函數只須要在腳本中使用函數名就能夠了。ide
3.參數傳遞
像函數傳遞參數就像在腳本中使用位置變量$1,$2...$9函數
4.函數文件
函數能夠文件保存。在調用時使用". 函數文件名"(.+空格+函數文件名)
如:
hellofun.sh
#!/bin/bash
#hellofun
function hello()
{
echo "hello,today is `date`"
return 1
}命令行
func.sh
#!/bin/bash
#func
. hellofun.sh
echo "now going to the function hello"
echo "Enter yourname:"
read name
hello $name
echo "back from the function"get
[test@szbirdora 1]$ sh func.sh
now going to the function hello
Enter yourname:
hh
hello,hh today is Thu Mar 6 15:59:38 CST 2008
back from the functionit
5.檢查載入函數 set
刪除載入函數 unset 函數名io
6.函數返回狀態值 return 0、return 1function
7.腳本參數的傳遞
shift命令
shift n 每次將參數位置向左偏移nclass
#!/bin/bash
#opt2
usage()
{
echo "usage:`basename $0` filename"
}
totalline=0
if [ $# -lt 2 ];then
usage
fi
while [$# -ne 0]
do
line=`cat $1|wc -l`
echo "$1 : ${line}"
totalline=$[$totalline+$line]
shift # $# -1
done
echo "-----"
echo "total:${totalline}"
[test@szbirdora 1]$ sh opt2.sh myfile df.out
myfile : 10
df.out : 4
-----
total:14
8.getopts命令
得到多個命令行參數
getopts ahfvc OPTION --從ahfvc一個一個讀出賦值給OPTION.若是參數帶有:則把變量賦值給:前的參數--:只能放在末尾。
該命令能夠作得到命令的參數
#!/bin/bash
#optgets
ALL=false
HELP=false
FILE=false
while getopts ahf OPTION
do
case $OPTION in
a)
ALL=true
echo "ALL is $ALL"
;;
h)
HELP=true
echo "HELP is $HELP"
;;
f)
FILE=true
echo "FILE is $FILE"
;;
\?)
echo "`basename $0` -[a h f] file"
;;
esac
done
[test@szbirdora 1]$ sh optgets.sh -a -h -m
ALL is true
HELP is true
optgets.sh: illegal option -- m
optgets.sh -[a h f] file
getopts表達式:
while getopts p1p2p3... var do
case var in
..)
....
esac
done
若是在參數後面還須要跟本身的參數,則須要在參數後加: 若是在參數前面加:表示不想將錯誤輸出 getopts函數自帶兩個跟蹤參數的變量:optind,optarg optind初始值爲1,在optgets處理完一次命令行參數後加1 optarg包含合法參數的值,即帶:的參數後跟的參數值