我想让用户输入选择,然后使用if ifif语句来区分输入。
代码:
read in
if $in = "1"
then
Type="Employee1"
elif $in = "2"
then
Type="Employee2"
elif $in = "3"
then
Type="Employee3"
else
echo "Wrong input"
错误:
./Pay.sh: line 127: 1: command not found
./Pay.sh: line 130: 1: command not found
./Pay.sh: line 133: 1: command not found
Wrong input
请告知谢谢
答案 0 :(得分:3)
需要方括号。
if [[ $in = "1" ]]; then
Type="Employee1"
elif [[ $in = "2" ]]; then
Type="Employee2"
elif [[ $in = "3" ]]; then
Type="Employee3"
else
echo "Wrong input"
fi
对于if
这个特定的链,您可以使用case
语句。
case $in in
1) Type='Employee1';;
2) Type='Employee2';;
3) Type='Employee3';;
*) echo 'Wrong input' >&2;;
esac
答案 1 :(得分:2)
这是case
构建的案例:
#!/bin/bash
read in
case "$in" in
1)
Type="Employee1"
;;
2)
Type="Employee2"
;;
3)
Type="Employee3"
;;
*)
echo "wrong input"
;;
esac
echo "type is $Type"
作为旁注,使用case
,您可以将所有条件匹配在一起。例如,$in
为1
或5
:
case "$in" in
1|5)
Type="Employee1"
;;
答案 2 :(得分:2)
在我看来,使用in
之类的shell关键字作为变量名是不好的风格。
read inp
case $inp in
1) Type="Employee1";;
2) Type="Employee2";;
3) Type="Employee3";;
*) echo "Wrong input";;
esac
您也可以考虑select
构造。由于其刚性输出而广受欢迎,它仍然可用于获取非常具体的输入:
select Type in Employee{1,2,3}; do
# Whatever you want to do with $Type
done
答案 3 :(得分:0)
一种完全不同的方法,如果您的目标是根据用户的输入设置变量,则使用关联数组。好处是,如果你的选择得到更多,那么大部分代码将用于定义这个数组(最终可以很容易地自动化),而不是在条件部分:
declare -A ass=() # that's a cool variable name
ass[1]="Employee 1"
ass[2]="Employee 2"
ass[3]="Employee 3"
read in # I have no problems with a variable named 'in' ;)
if [[ -z ${ass[$in]} ]]; then
echo "Wrong answer you banana!"
else
Type=${ass[$in]}
fi
答案 4 :(得分:0)
我将用户输入用作Type:
的一部分read inp
if ( [ $inp -ge 1 ] && [ $inp -le 3 ] )
then
Type="Employee$inp"
else
echo "wrong input"
fi