0

我想让用户输入选择,然后使用 if elif 语句来区分输入。

代码:

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

请指教谢谢

4

5 回答 5

3

方括号是必需的。

if [[ $in = "1" ]]; then
    Type="Employee1"
elif [[ $in = "2" ]]; then
    Type="Employee2"
elif [[ $in = "3" ]]; then
    Type="Employee3"
else
    echo "Wrong input"
fi

对于这个特定的ifs 链,您可以选择使用case语句。

case $in in
    1) Type='Employee1';;
    2) Type='Employee2';;
    3) Type='Employee3';;
    *) echo 'Wrong input' >&2;;
esac
于 2013-11-01T15:39:16.853 回答
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对于15

case "$in" in
        1|5)
           Type="Employee1"
           ;;
于 2013-11-01T15:39:15.810 回答
2

在我看来,使用 shell 关键字(例如in变量名)是一种糟糕的风格。

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
于 2013-11-01T15:39:23.710 回答
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
于 2013-11-01T15:53:25.053 回答
0

我会使用用户输入作为类型的一部分:

read inp

if ( [ $inp -ge 1 ] && [ $inp -le 3 ] )
then
    Type="Employee$inp"
else
    echo "wrong input"
fi
于 2013-11-01T23:06:43.127 回答