-- 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 $@;
doprint "The ${i}th parameter is [$p]";((i++));
done;#-------------- 迭代数组 $* ---------------#
i=0;
print 'iterating array $*';
for p in $*;
doprint "The ${i}th parameter is [$p]";((i++));
done;

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

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

结果如下:

iterating array $*
#--[abc]--#
#--[x]--#
#--[yz]--#
#--[1]--#
#--[2
3]--#
iterating array "$*"
#--[abc x yz 1 2
3]--#
iterating array $@
#--[abc]--#
#--[x]--#
#--[yz]--#
#--[1]--#
#--[2
3]--#
iterating array "$@"
#--[abc]--#
#--[x yz]--#
#--[1 2
3]--#

从上面的结果可以看到,只有"$@"能保证正确,注意有双引号哦。

方法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#" optname
docase "$optname" in"a")print "Option $optname is specified";;"b")# $OPTARG 保存选项后面的参数值,此例是 testprint "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;;esacprint "Current parameter index is $OPTIND";
done# 选项后面的参数 (eee ff g)
argstart=$OPTIND;
for p in "${@:$argstart}"
doprint "[$p]";
done

-- 更多参见:ksh 精萃

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

-- Last Updated on 2015-09-24
-- Written by ShangBo on 2015-09-21
-- End

ksh 向脚本传递参数相关推荐

  1. 20.27分发系统介绍;20.28expect脚本远程登录;20.29expect脚本远程执行命令;20.30expect脚本传递参数...

    20.27 分发系统介绍 shell项目-分发系统-expect 20.28 expect脚本远程登录 1. 安装expect [root@hao-01 ~]# yum install -y expe ...

  2. 命令行给php脚本传参,如何在CLI命令行下运行PHP脚本,同时向PHP脚本传递参数?...

    标签:c   t   sp   get   int   name   php   test   print   root   enter //命令行输入输出流 fwrite(STDOUT," ...

  3. linux向脚本传递参数,Linux 使用位置变量向脚本传递参数

    参考:<Linux命令 / 编辑器与脚本编程> ################################################# 脚本文件在执行时,也可以像命令和应用程序 ...

  4. shell脚本传递参数的方法

    在网上看到这边shell 脚本传递参数的方法,觉得写得很详细,收藏起来方便以后查找. 一.接收固定长度的参数 复制代码代码如下: [root@svn shell_example]# cat param ...

  5. linux shell java 参数_java调用linux中的shell脚本传递参数并返回执行结果

    [刚接触 linux下的开发,最近遇到java调用shell脚本的问题,找到一个比较适合菜鸟级的方法,转述如下: 在需要运行的SHELL脚本第一行添加 #!/bin/sh然后在终端运行  chmod ...

  6. python脚本传递参数

    argparse基本用法 argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数.它的使用也比较简单. 1.基本框架 下面是采用argparse从命令行获取用户名,该py ...

  7. shell脚本传递参数,并且判断参数是否为空

    #!/bin/bash echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; ...

  8. 如何在CLI命令行下运行PHP脚本,同时向PHP脚本传递参数?

    如何在命令行下运行PHP脚本[带参数] 创建一个简单的文本文件,其中包含有以下PHP代码,并把它保存为hello.php: <?php echo "Hello from the CLI ...

  9. Linux脚本传递参数

    一.Shell 特殊参数解释 首先来看几个特殊变量:$0, $#, $*, $@, $?, $$, $_ #!/bin/bash echo $0 # 当前脚本的文件名(间接运行时还包括绝对路径). e ...

最新文章

  1. Tengine高性能部署之—日志分割
  2. LearnOpenCV学习——平均脸faceAverage.py
  3. 查看电脑电池损耗的命令
  4. [Apache] Apache 從 2.2 換至 2.4 httpd.conf 的調整筆記 (windows 環境)
  5. JUC多线程:阻塞队列ArrayBlockingQueue与LinkedBlockingQueue
  6. django-2-目录结构
  7. 【渝粤题库】陕西师范大学202871 婚姻家庭法作业
  8. Hadoop 倒排索引
  9. UML之涉众/参与者(角色/执行者)(Actor)/业务主角(BusinessActor)/业务工人(BusinessWorker)/用户/角色辨析【图解】...
  10. vue js 和原生app调用回调方法问题
  11. seleniumphantomJs相关
  12. ORA-00955: 鍚嶇О宸茬敱鐜版湁瀵硅薄浣跨敤
  13. 优控触摸屏使用手册_中达优控plc触摸屏一体机说明书资料
  14. java中级开发工程师_Java中级开发工程师知识点归纳
  15. 两种方式,实现 SpringBoot 中数据库密码加密
  16. inssider序列号_AP注册问题-华三.ppt
  17. meson是用Python语言开发的构建工具,编译需要Ninja(用C++实现)命令。Meson 旨在开发最具可用性和快速的构建系统。
  18. 信息安全领域四大顶会
  19. ajax上传图片文件
  20. t3计算机名带特殊符号,带特殊符号的网名,带特殊符号的网名

热门文章

  1. 学计算机如果进场,CPA考试计算器有讲究,这些计算器禁止携带入场!
  2. python虚拟环境virtualenv使用命令行workon的操作错误
  3. 【CGroup原理篇】2. CGroup管理模式
  4. JavaScript中清空数组
  5. 生成式模型/判别式模型总结
  6. win7 旗舰 火鸡 (ji huo) 的锅 伙计寄货
  7. 串口+RS485驱动
  8. 利用RecyclerView实现仿陌陌滑动浏览图片
  9. AIR105 基于Keil开发点灯程序配置过程
  10. QR二维码中为什么可以插入图片