ksh 向脚本传递参数
-- 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 向脚本传递参数相关推荐
- 20.27分发系统介绍;20.28expect脚本远程登录;20.29expect脚本远程执行命令;20.30expect脚本传递参数...
20.27 分发系统介绍 shell项目-分发系统-expect 20.28 expect脚本远程登录 1. 安装expect [root@hao-01 ~]# yum install -y expe ...
- 命令行给php脚本传参,如何在CLI命令行下运行PHP脚本,同时向PHP脚本传递参数?...
标签:c t sp get int name php test print root enter //命令行输入输出流 fwrite(STDOUT," ...
- linux向脚本传递参数,Linux 使用位置变量向脚本传递参数
参考:<Linux命令 / 编辑器与脚本编程> ################################################# 脚本文件在执行时,也可以像命令和应用程序 ...
- shell脚本传递参数的方法
在网上看到这边shell 脚本传递参数的方法,觉得写得很详细,收藏起来方便以后查找. 一.接收固定长度的参数 复制代码代码如下: [root@svn shell_example]# cat param ...
- linux shell java 参数_java调用linux中的shell脚本传递参数并返回执行结果
[刚接触 linux下的开发,最近遇到java调用shell脚本的问题,找到一个比较适合菜鸟级的方法,转述如下: 在需要运行的SHELL脚本第一行添加 #!/bin/sh然后在终端运行 chmod ...
- python脚本传递参数
argparse基本用法 argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数.它的使用也比较简单. 1.基本框架 下面是采用argparse从命令行获取用户名,该py ...
- shell脚本传递参数,并且判断参数是否为空
#!/bin/bash echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; ...
- 如何在CLI命令行下运行PHP脚本,同时向PHP脚本传递参数?
如何在命令行下运行PHP脚本[带参数] 创建一个简单的文本文件,其中包含有以下PHP代码,并把它保存为hello.php: <?php echo "Hello from the CLI ...
- Linux脚本传递参数
一.Shell 特殊参数解释 首先来看几个特殊变量:$0, $#, $*, $@, $?, $$, $_ #!/bin/bash echo $0 # 当前脚本的文件名(间接运行时还包括绝对路径). e ...
最新文章
- Tengine高性能部署之—日志分割
- LearnOpenCV学习——平均脸faceAverage.py
- 查看电脑电池损耗的命令
- [Apache] Apache 從 2.2 換至 2.4 httpd.conf 的調整筆記 (windows 環境)
- JUC多线程:阻塞队列ArrayBlockingQueue与LinkedBlockingQueue
- django-2-目录结构
- 【渝粤题库】陕西师范大学202871 婚姻家庭法作业
- Hadoop 倒排索引
- UML之涉众/参与者(角色/执行者)(Actor)/业务主角(BusinessActor)/业务工人(BusinessWorker)/用户/角色辨析【图解】...
- vue js 和原生app调用回调方法问题
- seleniumphantomJs相关
- ORA-00955: 鍚嶇О宸茬敱鐜版湁瀵硅薄浣跨敤
- 优控触摸屏使用手册_中达优控plc触摸屏一体机说明书资料
- java中级开发工程师_Java中级开发工程师知识点归纳
- 两种方式,实现 SpringBoot 中数据库密码加密
- inssider序列号_AP注册问题-华三.ppt
- meson是用Python语言开发的构建工具,编译需要Ninja(用C++实现)命令。Meson 旨在开发最具可用性和快速的构建系统。
- 信息安全领域四大顶会
- ajax上传图片文件
- t3计算机名带特殊符号,带特殊符号的网名,带特殊符号的网名