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
推荐阅读
- Shell-Bash变量与运算符
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 概率论/统计学|随机变量 的 分布函数 与 概率密度函数 的区别
- [源码解析]|[源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3)
- Linux|109 个实用 shell 脚本
- vue组件中为何data必须是一个函数()
- 接口|axios接口报错-参数类型错误解决