Shell脚本传递带有空格的参数

  在另一博文《Shell脚本实现DB2数据库表导出到文件》中实现了通过脚本实现将DB2数据库导出到文件,需要传入七个参数,最后一个是一个带有空格字符串,所以传入的时候有点问题,会自动识别空格,默认会将空格前的当作第7个参数,以下是传入的参数:

MD duanwf 23742 CDR_CALL_YYYYMMDD /home/duanwf/asiainfo/export/T141015001_20141014.avl & fetch first 100000 rows only

  最后的“fetch first 100000 rows only”为第七个参数,但是识别的时候只获取到fetch,日志如下:

2014-10-15 17:51:59 [Thread-9] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:70 - Run Command:   /home/duanwf/workspace/shell2.sh MD duanwf 23742 CDR_CALL_YYYYMMDD /home/duanwf/asiainfo/export/T141015001_20141014.avl & fetch first 100000 rows only
2014-10-15 17:51:59 [Thread-9] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - execute sql .................
2014-10-15 17:51:59 [Thread-9] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - Begin to export the data:
2014-10-15 17:51:59 [Thread-9] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - \n2014/10/15-17:51:59 ====================connect to MD=======================
2014-10-15 17:51:59 [Thread-9] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - \n2014/10/15-17:51:59 db2 connect to MD user duanwf
2014-10-15 17:52:01 [Thread-9] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - \n2014/10/15-17:52:01 Succeed connect to MD
2014-10-15 17:52:01 [Thread-9] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - \n2014/10/15-17:52:01 export to /home/duanwf/asiainfo/export/T141015001_20141014.avl of del modified by nochardel codepage=1208 COLDEL&  select * from CDR_CALL_YYYYMMDD fetch:

  

  那要怎么处理呢?

之前问了有人说可以用双引号把他引起来,最后结果还是一样,无法拿到,只能获取到

"fetch

  还是会自动在空格前自动断开。

  可以通过[email protected]命令来处理,即将$7换成echo ${@:7},这样将自动识别到的第7个开始,全部获取到作为最后第7个参数,参数获取改为:

#!/bin/bash

DBSCHEMA=$1
DBUSER=$2
DBPASSWORD=$3
TABLENAME=$4
FILEPATH=$5
DELIMITER=$6
EXPORTLIMIT=`echo ${@:7}`

  再次运行结果:

2014-10-15 23:36:05 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:57 - Export Parameters: MD duanwf 23742 ST_ZGD_SCOPE_RSFR_GR_DM_201409 /home/duanwf/asiainfo/export/M141015003_201409.avl & fetch first 100000 rows only
2014-10-15 23:36:05 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:70 - Run Command:   /home/duanwf/workspace/shell/db2.sh MD duanwf 23742 ST_ZGD_SCOPE_RSFR_GR_DM_201409 /home/duanwf/asiainfo/export/M141015003_201409.avl & fetch first 100000 rows only
2014-10-15 23:36:05 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - execute sql .................
2014-10-15 23:36:05 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - Begin to export the data:
2014-10-15 23:36:05 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - \n2014/10/15-23:36:05 ====================connect to MD=======================
2014-10-15 23:36:05 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - \n2014/10/15-23:36:05 db2 connect to MD user duanwf
2014-10-15 23:36:08 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - \n2014/10/15-23:36:08 Succeed connect to MD
2014-10-15 23:36:08 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - \n2014/10/15-23:36:08 export to /home/duanwf/asiainfo/export/M141015003_201409.avl of del modified by nochardel codepage=1208 COLDEL&  select * from ST_ZGD_SCOPE_RSFR_GR_DM_201409 fetch first 100000 rows only:
2014-10-15 23:36:09 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - SQL3104N  EXPORT 实用程序 正在开始将数据导出至文件
2014-10-15 23:36:09 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - "/home/duanwf/asiainfo/export/M141015003_201409.avl"。
2014-10-15 23:36:09 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 -
2014-10-15 23:36:09 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - SQL3105N  Export 实用程序已经完成导出 "12742" 行。
2014-10-15 23:36:09 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 -
2014-10-15 23:36:09 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 -
2014-10-15 23:36:09 [Thread-2] INFO  com.asiainfo.dmp.proc.ExportDataServiceDB2.ExportData:78 - 导出的行数:12742

问题解决!!

<--------------------------------- 我是华丽的分割线 --------------------------------->

 

补充对Shell函数参数的说明:

来源:http://www.w3cschool.cc/linux/linux-shell-func.html

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

带参数的函数示例:

#!/bin/bash
funWithParam(){
    echo "The value of the first parameter is $1 !"
    echo "The value of the second parameter is $2 !"
    echo "The value of the tenth parameter is $10 !"
    echo "The value of the tenth parameter is ${10} !"
    echo "The value of the eleventh parameter is ${11} !"
    echo "The amount of the parameters is $# !"
    echo "The string of the parameters is $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

输出结果:

The value of the first parameter is 1 !
The value of the second parameter is 2 !
The value of the tenth parameter is 10 !
The value of the tenth parameter is 34 !
The value of the eleventh parameter is 73 !
The amount of the parameters is 12 !
The string of the parameters is 1 2 3 4 5 6 7 8 9 34 73 !"

注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

另外,还有几个特殊字符用来处理参数:

参数处理 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
[email protected] 与$#相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
时间: 2024-10-08 00:50:44

Shell脚本传递带有空格的参数的相关文章

Shell脚本传递带有空格的参数[摘录自网络]

参数处理 说明 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 [email protected] 与$#相同,但是使用时加引号,并在引号中返回每个参数. $- 显示Shell使用的当前选项,与set命令功能相同. $? 显示最后命令的退出状态.0表示没有错误,其他任何值表明有错误. MD duanwf 23742 CDR_CALL_YYYYMMDD /home/duanwf/asiainfo/exp

Uncaught SyntaxError : Unexpected token ILLEGAL js传递带空格的参数

通常在页面中要让某些内容点击后产生点击事件(非页面跳转)都会使用onclick,但是这样不适于需要传递参数的情况,于是写成直接调用JavaScript函数的方式:<a href=javascript:somefunction(args)>content</a>.注意,这么写是有问题的,问题就在于somefunction中的参数args的值不能含有空格,否则浏览器会认为空格后面的内容是<a>标签的某个属性,正确的写法应该是用引号将javascript:somefuncti

shell脚本,通过传入的参数来计算最大值和最小值以及平均值。

[[email protected] zuoye]# cat quansges.sh #!/bin/bash > file [ ! $# -ge 3 ] && echo "please input three number or more number!" && exit 2 || echo $* >file for i in $* do expr $i + 1 &> /dev/null [ $? -ne 0 ] &&a

Shell脚本入门学习

2018-04-29 00:34:18编辑 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Linux 的 Shell 种类众多,常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell(/bin/bash) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh) Shell for Root(/sbin/sh) 由于易用和

shell脚本编程基础知识

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务. Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell.bash是很多linux系统的默认shell. 下面开始写一个范例shell #!/bin/bashecho "Hello World

linux学习之shell脚本 ------- 脚本参数传递

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 今天再来看一下如何向shell脚本传递参数,需要掌握两个命令,一个是 shift命令,另一个是getopts. 脚本参数传递 shift命令 用法: shift n 每次将参数位置向左偏移n位 假如我们要实现统计多个文件的总行数,就可以用到这个shift命令了,如下: opt2.sh #!/bin/bash #op2 static files total lines; st

shell脚本编程之选择控制结构

程序开发语言,分为两种,一种是解释型语言,一种是编译型语言.解释型语言是解释语句,并且能根据流程控制机制让语句按需执行,解释一条语句就返回语句的结果,这种语言需要一个解释器,而linux中的bash就是这样的一个解释器,常见的解释型语言有perl,python,ruby,bash.编译型语言,首先需要编译源程序,并且能够将源程序转换为二进制格式,而后让其执行,这种语言需要一个编辑器,如linux下的gcc就是一个编辑器,编译型语言有C,C++,C#等.无论是解释型语言还是编译型语言,都有语言控制

Linux Shell脚本面试基本20问

Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务. Q:2 什么是默认登录shell,如何改变指定用户的登录shell 答:在Linux操作系统,"/bin/bash"是默认登录shell,是在创建用户时分配的.使用chsh命令可以改变默认的shell.示例如下所示: # chsh <用户名&

【转】Linux Shell脚本面试25问

Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务. Q:2 什么是默认登录shell,如何改变指定用户的登录shell 答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的.使用chsh命令可以改变默认的shell.示例如下所示: # chsh <username> -