我希望用户输入-s
后跟一个数字(例如-s 3
)。但是,我似乎无法在现有的旁边传递另一个变量-s
。这是我的代码:
echo choose
read choice
case $choice in
-a) echo you chose a
;;
-s $num) echo you chose the number $num #this is the -s number (e.g. -s 3) choice.
;;
esac
exit 0
答案1
几乎肯定有更好的方法来处理你正在做的事情。对于初学者,您应该避免提示用户输入任何输入,而是让他们在运行程序时在命令行上提供参数,但修改您的代码以使其工作:
read -rp 'choose: ' choice
case $choice in
-a) echo 'you chose a';;
-s\ [1-4]) "echo you chose the number ${choice#"-s "}";;
esac
您的num
变量似乎没有设置,因此它将扩展为空,使您的案例模式简单-s )
并且-s 4
不会匹配,-s )
因为......好吧,它们不一样。所以我们需要修改它以使其后面有一个数字 ( -s\ [1-4])
)。然后我们使用参数扩展来删除-s
.
我处理它的方法是使用getopts
类似于:
#!/bin/bash
while getopts as: opt; do
case $opt in
a) printf '%s\n' 'You have chosen: a';;
s) n=$OPTARG; printf '%s: %d\n' 'You have chosen s with an argument of' "$n";;
esac
done
有了这个,您可以在命令行上运行指定参数,例如:
./script.sh -s 4