bash在调用期间如何接受参数

时间:2014-11-14 20:06:01

标签: bash

假设我有一个名为foo.sh

的bash脚本
#!/bin/bash
echo "Type your name"
read personname
if["$personname" == "kevin"]; then
    echo "Your name is kevin"
    exit 1
fi

现在,我将其作为cp foo.sh /usr/bin/foo

进行全局访问

所以,我发现现在很难调用脚本并同时传递参数。 我只能这样做

bash foo
john

而不是

bash foo john 

3 个答案:

答案 0 :(得分:1)

参数最终出现在variables $1 - $9中。 $0存储调用脚本的名称(如果有多个符号链接指向一个脚本,则它很有用,例如,它们应对每个脚本做出不同的反应)。如果你有超过9个参数,你可以通过调用shift或用括号(${10}等括起来)来访问其他参数。

除此之外,你应该给自己(也可能是每个人)执行该脚本的执行权限,这样你就可以通过使用“foo”来调用它,而无需手动调用bash - 这就是你的shebang行。

答案 1 :(得分:1)

如果要接收参数,则必须以这种方式进行修改:

#!/bin/bash
personname=$1
if [ "$personname" = "kevin" ] ; then
    echo "Your name is kevin"
    exit 1
fi

现在您可以使用一个参数foo john调用脚本。

答案 2 :(得分:1)

在大多数情况下,您可以通过重定向标准输入来批量输送读取内容。

bash foo <<HERE
john
HERE

在这种情况下,我使用了所谓的HERE文件,该文件以两个较少的符号开头,后跟一个用于声明输入结束的标记。

另一个例子可能是对程序使用echo和pipe:

echo "kevin" | bash foo

同样,您可以从存储在文件或其他可以使用stdin读取的资源中的名称进行简单的重定向。