2015-12-21 126 views
0

我需要将参数传递给shell脚本,该脚本经过验证后需要以相同或修改后的形式传递给脚本中的函数。shell函数和参数传递问题

#!/bin/sh 
func1(){ 
echo "called func1 with $1" ; 
exit 0 ; 
} 

func2(){ 
echo "called func2 with $1" ; 
exit 0 ; 
} 

if [ $# -eq 0 ] 
then 
    echo "Usage:" ; 
    echo "script.sh arg1 arg2" ; 
    exit -1 ; 
fi 

if [ "$1" -eq "txt1" ] 
then 
    func1 $2 ; 
    exit 0 ; 
fi 

if ["$1" -eq "txt2" ] 
then 
    func2 $2 ; 
    exit 0; 
fi 

我得到的回应是

sh script.sh txt1 
sh: txt1: bad number 
sh: txt1: bad number 
+1

而不是大量的级联'if's,您可能需要使用'case'语句。 –

+0

顺便说一下,它不仅仅是需要引号的测试,以确保内容不加修改地通过;你也希望'func1'$ 2“'和'func2”$ 2“' –

回答

1

您正在使用字符串比较错误的操作。你想使用=,而不是-eq(这是比较整数)。

请注意,[只是shell的一个内部命令,所以您需要将其与参数中的空格分开。 (在脚本中进行第三次测试。)

+1

可能还需要提供空格(在第二次调用中丢失)。 –

+0

感谢您的快速帮助。我对STCK OVFL和linux shell都很陌生。 此外,我认为回应会帮助像我这样的新手寻找答案,而不是问题列表? – Ananth