【问题标题】:Bash Input Variables & LoopBash 输入变量和循环
【发布时间】:2014-05-13 23:10:41
【问题描述】:

我的脚本

#!/bin/bash
while :
do
    echo "[*] 1 - Create a gnome-terminal"
    echo "[*] 2 - Display Ifconfig"
    echo -n "Pick an Option > "
    read Input

    if [ "$Input" = "1" ]; then
        gnome-terminal
        sleep 3
    echo "[*] 1 - Create a gnome-terminal"
    echo "[*] 2 - Display Ifconfig"
    echo -n "Pick an Option > "
    read Input

    fi

    if [ "$Input" = "2" ]; then
        clear
        ifconfig
    echo "[*] 1 - Create a gnome-terminal"
    echo "[*] 2 - Display Ifconfig"
    echo -n "Pick an Option > "
    read Input

    fi

done

不重复使用 Input 变量,例如如果您想连续多次运行 ifconfig 选项。它重新检查第一个变量字符串以查看它是否匹配“1”,如果不匹配,它会回显选项列表。关于如何使任何输入变量无论何时使用都可访问的任何想法?

【问题讨论】:

    标签: bash loops


    【解决方案1】:

    问题是您在每次迭代中都要写出两次菜单。停止这样做:

    #!/bin/bash
    while :
    do
        echo "[*] 1 - Create a gnome-terminal"
        echo "[*] 2 - Display Ifconfig"
        echo -n "Pick an Option > "
        read Input
    
        if [ "$Input" = "1" ]; then
            gnome-terminal
            sleep 3
        fi
    
        if [ "$Input" = "2" ]; then
            clear
            ifconfig
        fi
    done
    

    【讨论】:

    • 天啊,我现在感觉很笨。谢谢你指出这一点。在输入的每个命令都完成后,我试图获取该列表。这当然解决了它。
    • 无论如何,你的情况下
    【解决方案2】:

    使用select 而不是滚动您自己的菜单:

    choices=(
        "Create a gnome-terminal" 
        "Display Ifconfig"
    )
    PS3="Pick an Option > "
    select action in "${choices[@]}"; do 
        case $action in 
            "${choices[0]}") gnome-terminal; sleep 3;; 
            "${choices[1]}") clear; ifconfig;; 
            *) echo invalid selection ;; 
        esac
    done
    

    select 默认为您提供无限循环。如果你想打破它,请将​​break 语句放入case 分支。

    【讨论】:

      猜你喜欢
      • 2020-09-12
      • 2018-02-20
      • 2013-09-11
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      相关资源
      最近更新 更多