在Unix函数中使用参数

时间:2018-09-27 18:52:51

标签: shell unix ksh

我想使用功能运行脚本。脚本可以正常运行,但是希望使用函数运行并以arg

的形式传递
#! /bin/ksh
#
#       profile.ksh
#
#       sample Korn shell profileument. Example:

build(){
return /home/$1/script.sh;
}

但是当我做类似的事情时:

$ build 09272018

我遇到以下错误:

ksh:/home/09272018/script.sh:错误的数字

任何想法如何做到这一点?运气不好就尝试了各种选择。

谢谢!

2 个答案:

答案 0 :(得分:2)

您不能从Shell函数返回任意值,只能返回整数(通常为0到255之间)。相反,您可以将“返回值”写入标准输出:

$ build () { echo /home/$1/script.sh; }
$ script_name=$(build 09272018)
$ echo "$script_name"
/home/09272018/script.sh

或者您设置一个全局变量。

$ build () { script_name=/home/$1/script.sh; }
$ build 09272018
$ echo "$script_name"
/home/09272018/script.sh

(无论如何,return返回的值应该是退出状态,其中0表示函数成功,而非零值表示函数以某种方式失败。永远不要将其用于返回数据。)

答案 1 :(得分:0)

我认为您有一个不同的子目录,每个子目录都有一个script.sh。
${HOME}/version0_1/script.sh${HOME}/johndoe/script.sh${HOME}/version1_0/script.sh之类的东西。
现在,您要使用参数运行正确的脚本。
您可以使用source(可以缩写为.)。 当您只需要调用一个脚本时,该参数就可以了;当您需要调用很多其他脚本时,请考虑一个变量。

只需一个电话

build(){
   source ${HOME}/"$1"/script.sh;
}
build version1_0

# When you need the parameter in other call to
build(){
   source ${HOME}/"${buildversion}"/script.sh;
}
buildversion="version1_0"

您可能会注意到,我将版本放在双引号中。也许有人用诸如${HOME}/version0.2 beta 3/script.sh之类的空格制作一个子目录。我也应该在引号中加上${HOME},但我认为系统管理员不会在homedir中放置空格。