【问题标题】:Using "if" and "case" to change hostname使用“if”和“case”更改主机名
【发布时间】:2014-04-23 08:44:30
【问题描述】:

我正在尝试使用“case”结构来提供选项,并使用“if”来实际执行操作。我在脚本方面非常陌生,所以请原谅我缺乏知识。为简化起见,我将跳过代码中的所有 cmets,仅使用该脚本的 1(一个)选项。

#!/bin/sh
echo " 01. Select a new hostname"
read -p "Make your selection: " varSelection
 case $varSelection in
  1)
    read -p "$(echo -e 'Enter hostname here: \n')" varHostName
    read -p "¿Are u sure u want to use \" $varHostname \"? (y/n)"varHostNameRight
    if [ $varHostNameRight == y ]; then
        sed -i "s/^\(HOSTNAME\s*=\s*\).*\$/\1$varHostName/" /etc/sysconfig/network
        hostname $varHostName
    else
        if [ $varHostNameRight == n ]; then
    fi
    ;;
 esac

在这个例子中,我想要实现的是,如果用户在“04”行选择“y”,在执行第 6 行和第 7 行后,他返回到“case”菜单(实际上,还有更多选项在 1)) 以外的情况下,我不知道该怎么做:S 在我的脚本中应用每个选项后,我必须重新运行它以选择其他选项。

另外,如果用户在“04”行选择“否”,我想“循环”到“03”行……但我不知道该怎么做:(

拜托,任何帮助都非常受欢迎!

最好的问候,

塞巴斯

【问题讨论】:

  • 请不要在代码中插入行号。如果您需要引用特定行,请添加注释。不要忘记将您的代码格式化为代码(突出显示它并点击 {} 图标)。
  • 感谢您修复它!对不起:S
  • 所以,一个明显的问题是您实际上并没有为您的case 语句编写任何可能的匹配项。有关 case 用法的一个很好的示例,请参阅 here
  • 嗨 dg99!感谢您的评论!我一定错过了复制它。代码按预期工作,直到“if [ $varHostNameRight == n ]; then”,因为我不知道如何告诉脚本“跳”回它首先询问“在此处输入主机名”的行。跨度>

标签: linux bash sed case sh


【解决方案1】:

使用while 循环:

while read -p "Make your selection: " varSelection; do
...
done

break 适当。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    相关资源
    最近更新 更多