博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ksh 向脚本传递参数
阅读量:4050 次
发布时间:2019-05-25

本文共 2822 字,大约阅读时间需要 9 分钟。

-- Start

方法1

如果你的脚本只需要很少的参数,你可以通过 $1,$2 ... $n 直接引用它们。下面是一个简单的例子。
#!/bin/ksh# $0 表示脚本名print "The script name is $0";print "The first parameter is $1";print "The Second parameter is $2";
你也可以使用 shift 删除前面的参数即可,后面的参数会自动前移,下面是一个简单的例子。
#!/bin/kshprint "The first parameter is $1";# shift 删除第一个参数,同时将后面的参数前移shift;print "The Second parameter is $1";# 注意此次还是 $1print "The third parameter is $2";print "The fourth parameter is $3";# shift 删除前三个参数,同时将后面的参数前移shift 3;print "The fifth parameter is $1";# 注意此次还是 $1

方法2

事实上,ksh 会自动将所有的参数放到数组 $@ 和 $* 数组中,你可以迭代它来得到所有的参数。下面是一个简单的例子
#!/bin/ksh#-------------- $# 表示参数的数量 ---------------#print "This script has $# parameters.";#-------------- 迭代数组 $@ ---------------#typeset -i i=1;print 'iterating array $@';for p in $@;do	print "The ${i}th parameter is [$p]";	((i++));done;#-------------- 迭代数组 $* ---------------#i=0;print 'iterating array $*';for p in $*;do	print "The ${i}th parameter is [$p]";	((i++));done;

ksh 为什么会将参数放在两个数组中($@,$*),它们有什么区别呢?下面的例子演示了它们之间的区别。

#!/bin/ksh#-------------- 迭代数组 $*---------------#print 'iterating array $*';for p in $*;do	print "#--[$p]--#";done;#-------------- 迭代数组 "$*",注意数组用双引号括起来 ---------------#print 'iterating array "$*"';for p in "$*";do	print "#--[$p]--#";done;#-------------- 迭代数组 $@ ---------------#print 'iterating array $@';for p in $@;do	print "#--[$p]--#";done;#-------------- 迭代数组 "$@",注意数组用双引号括起来 ---------------#print 'iterating array "$@"';for p in "$@";do	print "#--[$p]--#";done;
结果如下:

iterating array $*#--[abc]--##--[x]--##--[yz]--##--[1]--##--[23]--#iterating array "$*"#--[abc x yz 1 23]--#iterating array $@#--[abc]--##--[x]--##--[yz]--##--[1]--##--[23]--#iterating array "$@"#--[abc]--##--[x yz]--##--[1 23]--#
从上面的结果可以看到,只有"$@"能保证正确,注意有双引号哦。

方法3

如果你想像 Linux 命令那样传递参数,你需要用到函数 getopts。
#!/bin/ksh# OPTIND 表示当前参数的索引print "Current parameter index is $OPTIND";# 调用此脚本的方式: ./test.ksh -a -b 'test' -c 10 eee ff g## getopts 函数有两个参数## 第一个参数(:ab:c#)是该脚本支持的选项# 最前面的冒号表示  getopts 抑制错误消息,由脚本自己提供错误处理# b 后的冒号表示改选项需要一个字符参数 (-b 'test')# c 后的井号表示改选项需要一个数字参数 (-c 10)## 第二个参数  optname 是一个变量名,接收函数返回的选项while getopts ":ab:c#" optnamedo	case "$optname" in		"a")			print "Option $optname is specified"			;;		"b")			# $OPTARG 保存选项后面的参数值,此例是 test			print "Option $optname has value $OPTARG"			;;		"c")			print "Option $optname has value $OPTARG"			;;		"?") # ? 表示发现不能识别的选项			print "Unknown option $OPTARG"			exit -1			;;		":") # : 表示发现某个选项需要值,但是找不到这个值, 此时  OPTARG 包含丢失参数的选项			print "No argument value for option $OPTARG"			exit -1			;;		*)       print "Unknown error while processing options"       exit -1       ;;    esac    print "Current parameter index is $OPTIND";done# 选项后面的参数 (eee ff g)argstart=$OPTIND;for p in "${@:$argstart}"do	print "[$p]";done

-- 更多参见:

-- 声 明:转载请注明出处

-- Last Updated on 2015-09-24

-- Written by ShangBo on 2015-09-21
-- End

你可能感兴趣的文章
java自定义容器排序的两种方法
查看>>
如何成为编程高手
查看>>
本科生的编程水平到底有多高
查看>>
AngularJS2中最基本的文件说明
查看>>
从头开始学习jsp(2)——jsp的基本语法
查看>>
使用与或运算完成两个整数的相加
查看>>
备忘:java中的递归
查看>>
DIV/CSS:一个贴在左上角的标签
查看>>
Solr及Spring-Data-Solr入门学习
查看>>
Vue组件
查看>>
python_time模块
查看>>
python_configparser(解析ini)
查看>>
selenium学习资料
查看>>
<转>文档视图指针互获
查看>>
从mysql中 导出/导入表及数据
查看>>
HQL语句大全(转)
查看>>
几个常用的Javascript字符串处理函数 spilt(),join(),substring()和indexof()
查看>>
javascript传参字符串 与引号的嵌套调用
查看>>
swiper插件的的使用
查看>>
layui插件的使用
查看>>