【发布时间】:2015-01-12 07:36:17
【问题描述】:
假设我有一个名为 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
【问题讨论】:
-
只是为了稍后节省您的时间:您需要在
if语句中使用更多空格:if [ "$personname" = "$kevin" ]; then。 (并且不要在[...]中使用==,即使bash允许。使用=,或者改用[[ ... ]]。) -
read从标准输入读取。命令行参数不在标准输入上传递。 -
哦,很高兴知道这些。我徘徊为什么我们必须使用
=而不是== -
由于使用了
bash foo,这告诉我您没有在 /usr/bin/foo 上设置执行权限位。您应该可以简单地使用foo john调用脚本。要设置执行位,请使用八进制权限chmod 0755 /usr/bin/foo或chmod ug+x /usr/bin/foo -
@Contax,因为
==没有被POSIX sh 标准指定,所以只有一些shell 支持它。另一方面,在比较中使用=是标准的一部分——因此任何符合 POSIX 的 shell 都可以使用该语法。
标签: bash