在bash中if else语句

时间:2013-11-01 15:36:39

标签: bash shell ubuntu

我想让用户输入选择,然后使用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

请告知谢谢

5 个答案:

答案 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,您可以将所有条件匹配在一起。例如,$in15

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