shell 函数参数传递

#位置参数可以超过9个


#shift n每个将参数位置向左偏移n位
#编辑文件
vi opt2
#ne 不等于
#lt 小于
#查看opt2文件内容
[root@localhost 0417]# cat opt2
#!/bin/bash
#opt2
usage()
{
echo "usage:`basename $0` filenames"
}
totalline=0
if [ $# -lt 2 ]
then
usage
exit
fi
while [ $# -ne 0 ]
do
line=`cat $1|wc -l`
echo "$1 : ${line}"
totalline=$[ $totalline+$line ]
shift
done
echo "---------"
echo "total:${totalline}"
#拷贝文件
[root@localhost 0417]# cp ../0416/func* .
#改变权限
[root@localhost 0417]# chmod 755 opt2
#执行
[root@localhost 0417]# ./opt2
usage:opt2 filenames
#执行 加一个参数
[root@localhost 0417]# ./opt2 func
usage:opt2 filenames
#执行 加2个参数 正常统计
[root@localhost 0417]# ./opt2 func func2
func :9
func2 :9
---------
total:18




#getopts 获得多个命令行参数
#编辑
vi optgets
#改变权限
[root@localhost 0417]# chmod 755 optgets
#查看文件内容
[root@localhost 0417]# cat optgets
#!/bin/bash
ALL=false
HELP=false
FILE=false
VERBOSE=false
while getopts ahfvc 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"
; ;
v)
VERBOSE=true
echo "VERBOSE is $VERBOSE"
; ;
c)
echo "c value is $c"
; ;
\?)
echo "`basename $0` -[a h f v] -[c value] file "
; ;
esac
done
#执行 加参数a
[root@localhost 0417]# ./optgets -a
ALL is true
#执行 加参数a、h
[root@localhost 0417]# ./optgets -a -h
ALL is true
HELP is true
#执行 加参数a、h、d。d为未知参数,报错
[root@localhost 0417]# ./optgets -a -h -d
ALL is true
HELP is true
./optgets: illegal option -- d
optgets -[a h f v] -[c value] file
#执行 加参数a、h、c,c后不加内容
[root@localhost 0417]# ./optgets -a -h -c
ALL is true
HELP is true
c value is
##执行 加参数a、h、c,f后加内容,但仍然不打印
[root@localhost 0417]# ./optgets -a -h -c ff
ALL is true
HELP is true
c value is
#重新编辑
vi optgets
#查看
[root@localhost 0417]# cat optgets
#!/bin/bash
ALL=false
HELP=false
FILE=false
VERBOSE=false
while getopts ahfvc: 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"
; ;
v)
VERBOSE=true
echo "VERBOSE is $VERBOSE"
; ;
c)
#将传入的参数赋值给c
c=$OPTARG
echo "c value is $c"
; ;
\?)
echo "`basename $0` -[a h f v] -[c value] file "
; ;
esac
done


#执行 加参数a、h、c,c后加内容ff,发现正常打印
[root@localhost 0417]# ./optgets -a -h -c ff
ALL is true
HELP is true
c value is ff
#执行 加参数a、h、c,c后不加内容,报错
[root@localhost 0417]# ./optgets -a -h -c
ALL is true
HELP is true
./optgets: option requires an argument -- c
optgets -[a h f v] -[c value] file

    推荐阅读