【发布时间】:2016-02-16 00:20:47
【问题描述】:
我一直在通过论坛搜索解决此问题的方法,但我遇到的所有问题都超出了我的标准,或者无法解决我的问题。我正在尝试做的是非常基本的,但似乎无法让它在 unix 中工作。我目前正在使用 unix 中的 bash 脚本,但我无法让 if 语句和 echo 命令正常工作。
尝试获取 if 语句以在其中运行系统命令,并且每次我遇到找不到命令的错误时。 (即:whoami:找不到命令。) echo 命令也有同样的问题。 (即:w: command not found。)我知道这些命令会起作用,因为我可以将它们放入命令行,它们会返回我正在寻找的值。
function userprocess {
if [[ $(whoami | grep $EUIDS) = $EUIDS ]]
then
echo -e "==> Active processes for $EUIDS \050 Logged in \0051:"
echo "$(w -h $EUIDS)"
else
echo -e "==> Active processes for $EUIDS \0050 NOT logged in \0051:"
echo "$(w -h $EUIDS)"
fi
}
我试过了
function userprocess {
if [[ ${command[whoami | grep $EUIDS]} = $EUIDS ]]
then
echo -e "==> Active processes for $EUIDS \050 Logged in \0051:"
echo ${command[w -h $EUIDS]}
else
echo -e "==> Active processes for $EUIDS \0050 NOT logged in \0051:"
echo ${command[w -h $EUIDS]}
fi
}
还有这个……
function userprocess {
if [[ 'whoami | grep $EUIDS' = $EUIDS ]]
then
echo -e "==> Active processes for $EUIDS \050 Logged in \0051:"
echo 'w -h $EUIDS'
else
echo -e "==> Active processes for $EUIDS \0050 NOT logged in \0051:"
echo 'w -h $EUIDS'
fi
}
我在这里做错了什么?有时我得到正确的输出只是为了得到一个等于 $EUIDS 的错误令牌。我已经走到了尽头,我需要一条生命线来完成这件事。
【问题讨论】:
-
什么样的Unix?你用的是什么外壳?您正在使用 Bash 语法,但您确定这是在 bash 下运行的吗?通常,当您
echo一个命令时,它只会将您在引号中的内容准确地打印到终端。运行命令并显示输出的正确方法是只使用w -h $EUIDS,而不是echo "echo $(w -h $EUIDS)"或echo 'w -h $EUIDS'。 -
ok bash 版本 4.2.25 GNU bash 并且不确定 unix 版本(可能是 i686-pc-linux-gnu)并且只输入 w -h $EUIDS 会给我错误 w: command not recognized。还使用 #! 的包含/bin/bash
-
发现 unix 版本为 3.2.0-97-generic #137-Ubuntu
-
我不确切知道您要做什么(可能有更好的方法),但根据经验:在
Bash中,单引号''不转义任何东西,所以当你想做echo "w -h $EUIDS"之类的事情时,请使用双引号。关于if,你为什么不试试这个:if [ "$(whoami | grep $EUIDS)" = "$EUIDS" ]; then ... -
啊,天哪,这是一些变量中该死的大写字母。浏览脚本并将所有变量转换为小写,中提琴!过度写入 PATH 是问题所在。好吧,对于新手用户来说,为什么大多数 bash 教程都是用大写的变量名编码的?谢谢一百万,我会修复的。
标签: bash shell unix if-statement echo