关于shell脚本return方法的问题

Questions about shell script return method

我制作了一个脚本来通过PXE 配置服务器。 当通过 pxe 引导时, shell.sh 出现在服务器上。 但是,如果在脚本输入段(读取)中输入了错误的值,则会立即关闭电源。 有没有办法return它到输入段落?

添加了以下脚本:

#!/bin/bash
(omit)
echo "*************************"
echo "Select script"
echo "      1) firmware"
echo "      2) capture"
echo "      3) get"
echo ""
echo "      4) SMBSET_FW+BIOSSET"
echo ""
echo "      b) bash shell"
echo "      n) systeminfo"
echo "      e) poweroff"
echo "      r) reboot"
echo "*************************${normal}"
read num

case $num in
    1) bash ./firmware.sh;;
    2) bash ./capture.sh;;
    3) bash ./get.sh;;
    4) bash ./smb.sh;;
    b) bash ./bash.sh;; 
    n) bash ./systeminfo.sh;; 
    e) poweroff -f;;
    r) reboot -f;;
esac

将代码放入循环中。如果他们输入不匹配的响应,使用 continue 重复循环,否则跳出循环。

while :; do
    echo "*************************"
    echo "Select script"
    echo "      1) firmware"
    echo "      2) capture"
    echo "      3) get"
    echo ""
    echo "      4) SMBSET_FW+BIOSSET"
    echo ""
    echo "      b) bash shell"
    echo "      n) systeminfo"
    echo "      e) poweroff"
    echo "      r) reboot"
    echo "*************************${normal}"
    read num
    
    case $num in
        1) bash ./firmware.sh;;
        2) bash ./capture.sh;;
        3) bash ./get.sh;;
        4) bash ./smb.sh;;
        b) bash ./bash.sh;; 
        n) bash ./systeminfo.sh;; 
        e) poweroff -f;;
        r) reboot -f;;
        *) echo "Invalid response, try again"; continue;;
    esac
    break
done