【问题标题】:What is wrong with my "if" statement in bash shell我在 bash shell 中的“if”语句有什么问题
【发布时间】:2015-10-30 01:09:45
【问题描述】:

我对 bash(ing) 完全陌生,我想了解我对这个脚本做错了什么。我可以打开脚本并输入一个数字,但它会关闭终端而没有任何响应。我还要提前感谢您抽出时间来查看此内容。非常感谢。

#!/bin/bash

#options 1-4 have options, option 5-x is else command
echo "Type one of the following:"
echo "1 - whoami"
echo "2 - df"
echo "3 - date"
echo "4 - cal"
echo -n "select option:"

read option

if [ "$option" == "1" ]
    then #use whoami command
        echo "whoami"

elif [ "$option" == "2" ]
    then #use df command
        echo "df"
elif [ "$option" == "3" ]
    then #use date command
        echo "date"
elif [ "$option" == "4" ]
    then #use cal command
        echo "cal"

else #red colored error message
    echo "You make an invalid selection. Exiting."
fi

exit 0

【问题讨论】:

  • 脚本执行情况如何?
  • 在 bash 中为我工作。但不适用于/bin/sh,因为== 不兼容POSIX(请改用=)。
  • 我右键单击文件并打开它并“在终端中运行它”
  • 输出你的选择后立即退出;此时您的终端模拟器正在关闭窗口,因为它已配置为在其初始命令退出后这样做。
  • 我实际上认为我想通了......我现在觉得很傻。谢谢你们!我没有意识到 ./ 应该在实际文件之前使用。

标签: linux bash shell terminal


【解决方案1】:

问题出在你的出口 0 上。因为出口 0 会执行,所以它会退出程序。如果您输入任何选项,它将打印该选项的输出并退出。如果您想连续执行操作,可以使用循环。

【讨论】:

    【解决方案2】:

    使用“-eq”运算符而不是“==”进行比较

    *if [ "$option" -eq "1" ]*
    

    【讨论】:

    • 在这种情况下,不能保证用户输入了一个数字,所以我会说字符串比较更合适。 (虽然== 是一个bashism,所以= 实际上更好。)
    【解决方案3】:

    在 bash 中进行比较,您不能使用 '==' 而是使用 '='。

     if [ "$option" = "1" ]
    

    【讨论】:

    • 其实==在bash中是支持的。只是它不兼容 POSIX
    猜你喜欢
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多