Linux Scripts and If elif else statements
我对Linux很陌生。确切地说是六个星期。不管怎样,我正在做一项我似乎不想去的工作。我要创建一个脚本,当输入:
1
| sh filename.sh"username" |
在命令行,它返回或显示来自目录/etc/passwd和/etc/group的信息。我做了无数的江户话,都无济于事。我现在就在这里。如果有人能在这里提供某种程度的指导,我们将不胜感激。我只是不知道我在这里哪里出了问题。
1 2 3 4 5 6 7 8 9 10 11 12 13
| #! /bin/bash
VAR1="$(grep bob /etc/passwd && grep bob /etc/group)"
VAR2="$(grep henry /etc/passwd && grep henry /etc/group)"
if [$VAR1]; then
echo"$VAR1"
elif [$VAR2]; then
echo"$VAR2"
else
echo"The user entered is invalid"
fi
exit 0 |
号
- 在寻求人的帮助之前,请尝试shellcheck.net。另请参见堆栈溢出bash标记wiki或非常常见的问题列表。
- 我找了两天的时间想问这样的问题。我怀疑我的搜索没有提出正确的问题。你能告诉我如何最好地缩小搜索时得到的所有结果吗?或者显示你所说主题的标题?我要看看shellcheck.net和bash标签wiki,希望能找到它。谢谢你的帮助!.
- @我刚刚搜索了"bash i f else语句",得到了这个结果:stackoverflow.com/questions/16034749/…—结果是正确的。你在找什么?
- 很遗憾,在Stack OvesFlow上搜索本身不是很好;我通常使用site:stackoverflow.com作为搜索条件之一。不知道你想找什么,很难给出具体的建议。如果你收到一条错误消息,用双引号谷歌搜索通常是一个很好的开始,但是在本例中,一个关于代码故障排除的教程可能会对你有所帮助。
- codeforester,老实说,我不能肯定地说我输入了你正在显示的确切示例,但是经过所有的搜索,我希望如此。谢谢你的意见!
试试这个:
1 2 3 4 5 6 7 8 9 10 11 12
| #!/bin/bash
VAR1="$(grep bob /etc/passwd && grep bob /etc/group)"
VAR2="$(grep henry /etc/passwd && grep henry /etc/group)"
if ["$VAR1" ]; then
echo"$VAR1"
elif ["$VAR2" ]; then
echo"$VAR2"
else
echo"The user entered is invalid"
fi |
变化:
- 条件内部的间距(括号和参数之间必须有空格)
- 引用内部条件(防止分词)
- 端部不需要exit 0。
- 第一行:通常在!之后不使用空格(尽管不是bug)
- 捕获一个变量的grep输出,以便与空字符串进行比较,这是一个反模式。if grep '^henry' /etc/passwd && grep '^henry' /etc/groups; then ...将打印任何匹配项,并将其退出代码返回if一次性进行流控制。(如果不想打印匹配项,请使用grep -q。请注意缺少[,如果您对此感到困惑,请参阅stackoverflow.com/questions/36371221/…。
- 当我将空间添加到正确显示的状态时。但是,不管输入的用户名是什么,它都会显示与var1关联的相同输出。我阅读了你提供的页面上的信息,并尝试了那些替代方法,但没有奏效。让我看看是否可以发布输出的屏幕截图。
- @f.garvin如果VAR1扩展为非空字符串,则["$VAR1" ]测试返回0(真)。如果您的if块总是返回相同的东西,那是因为这个变量从不扩展为空字符串。VAR1是否包含您期望的内容?