假设我有一个名为foo.sh
#!/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
答案 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读取的资源中的名称进行简单的重定向。