我想制作一个脚本,在您键入第一个命令后,我想被发送回上一个。
#!/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。这可以在同一个脚本中完成吗?
将要重复的部分包装成循环,并考虑如何退出循环。在这里,如果输入q
,break
命令将退出循环。否则,在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"
while
和case
:
#!/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
$