if语句-#/bin/bash读取if,然后返回读取



我想制作一个脚本,在您键入第一个命令后,我想被发送回上一个。

#!/bin/bash
read -p " Please enter [x ; y ; z]: " COMMAND
if [ "$COMMAND" = x ] ; then
    echo " This is command X. "
#Then return to    read -p " Please enter [x ; y ; z]: " COMMAND
elif [ "$COMMAND" = y ]; then
    echo " This is command y. "
#Then return to    read -p " Please enter [x ; y ; z]: " COMMAND
elif [ "$COMMAND" = z ]; then
    echo " This is command z"
#Then return to    read -p " Please enter [x ; y ; z]: " COMMAND
else
    echo " Command not found! "
fi

例如,若你们键入x,我希望可以在那个之后键入y或z。这可以在同一个脚本中完成吗?

将要重复的部分包装成循环,并考虑如何退出循环。在这里,如果输入qbreak命令将退出循环。否则,在if语句完成后,您将返回循环的顶部进行另一轮。

while true; do
    read -p " Please enter [x ; y ; z; q]: " COMMAND
    if [ "$COMMAND" = x ] ; then
        echo " This is command X. "        
    elif [ "$COMMAND" = y ]; then
        echo " This is command y. "        
    elif [ "$COMMAND" = z ]; then
        echo " This is command z"
    elif [ "$COMMAND" = q ]; then
        break
    else
        echo " Command not found! "
    fi
done

您可以通过使用case语句而不是大的if语句来清除此问题。您可以为每个选项执行多个命令;CCD_ 6用信号通知每个特定块的结束。

while true; do
    read -p " Please enter [x ; y ; z; q]: " COMMAND
    case $COMMAND in
        x) echo "This is command X."
           ;;
        y) echo "This is command Y."
           ;;
        z) echo "This is command Z."
           ;;
        q) break ;;
    esac
done

您还可以包含一个特定的测试来代替true命令,这样循环本身就可以检查命令的值并终止,而不是等待显式的break命令。

while [ "$COMMAND" -ne q ]; do
    read -p " Please enter [x ; y ; z; q]: " COMMAND
    case $COMMAND in
        x) echo "This is command X."
           ;;
        y) echo "This is command Y."
           ;;
        z) echo "This is command Z."
           ;;
    esac
done

只需将整个事情包裹在一个永无止境的while循环中:

while true
do
    [whatever]
done

递归函数将使工作变得简单

#!/bin/bash
readfun(){
read -p " Please enter [x ; y ; z]: " command  # Use lowercase names
[[ "$command" =~ ^[xyz]$ ]] && readfun 
# logical AND ie '&&' terminates the recursion if any character other than x y z is entered
}
readfun #starting point for the script
echo "Command : ${command} not found"

whilecase:

#!/bin/bash
while true
do
    read -p " Please enter [x ; y ; z]: " COMMAND
    case $COMMAND in
        x) echo " This is command x. "
            ;;
        y) echo " This is command y. "
            ;;
        z) echo " This is command z. "
            ;;
        *) exit 0
            ;;
    esac
done

行动中:

$ bash test.sh
 Please enter [x ; y ; z]: x
 This is command x.
 Please enter [x ; y ; z]: y
 This is command y.
 Please enter [x ; y ; z]: z
 This is command z.
 Please enter [x ; y ; z]: a
$

最新更新