包含变量和用户输入的Case语句



如何使用带有变量的case语句?

我正在编写一个bash脚本,记录简单的信息并将其保存到csv文件中。整个脚本是这样的:您有选项可供选择(使用case语句),这些选项将被记录到一个文件中。在我所处的位置,有一个提示询问用户数量。在对数中,它要么是负的,要么是正的。因此,如果我从日志中取出一些东西,它需要显示-1项(-1)如果我取出一些东西,它应该是+1或+2或其他数量。

最后,我想使用一个引脚垫,你有按钮0-9#*。我想使用作为一个选项按钮*为减号和按钮#为加号(我知道我不应该,但显然,如果你把它们注释掉,它似乎确实有效)。

例如,如果用户按*,则用户需要按一个数字,该数字将表示物品的数量。但是如果用户按错了按钮,我希望脚本忽略它并再次显示*#选项。

最后,就像我提到的,我需要它都是一个变量,我可以回显到日志。

我开始写它,因为有人帮我做了类似的事情,但我试过的事情都没有成功。

这只是我想去的地方的想法:

#! /bin/bash

minus="-"
plus="+"
echo "Press * for minus"
echo "Press # for plus"
echo "And then enter the quantity"
read -r choice
#And then comes case I guess.
#!/bin/bash
while true; do
echo "Press * for minus"
echo "Press # for plus"
echo "And then enter the quantity"
read -r choice </dev/tty
case $choice in
'*')    # user input is 'minus' only
read -r qty </dev/tty    # prompt user to input qty
if [[ $qty =~ ^[0-9]+$ ]]    # if qty input is only numbers
then
echo "-$qty" >> mylog.csv
break    # break the loop after valid input
else
echo "INVALID INPUT" >&2
# do not break loop
fi
;;
'#')    # user input is 'plus' only
read -r qty </dev/tty
if [[ $qty =~ ^[0-9]+$ ]]
then
echo "+$qty" >> mylog.csv
break
else
echo "INVALID INPUT" >&2
fi
;;
'*'[0-9]*)    # user input is 'minus' followed by at least 1 number
qty=${choice/#'*'}    # qty is choice without leading symbol
if [[ $qty =~ ^[0-9]+$ ]]
then
echo "-$qty" >> mylog.csv
break
else
echo "INVALID INPUT" >&2
fi
;;
'#'[0-9]*)    # user input is 'plus' followed by at least 1 number
qty=${choice/#'#'}
if [[ $qty =~ ^[0-9]+$ ]]
then
echo "+$qty" >> mylog.csv
break
else
echo "INVALID INPUT" >&2
fi
;;
*)    # any other input or no input
echo "INVALID INPUT" >&2
# do not break loop
;;
esac
done

最新更新