本文共 2822 字,大约阅读时间需要 9 分钟。
-- Start
#!/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
#!/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]--#从上面的结果可以看到,只有"$@"能保证正确,注意有双引号哦。
#!/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