【问题标题】:comparing $var to比较 $var
【发布时间】:2013-01-24 16:18:25
【问题描述】:

我有一个测试脚本,需要读取变量“LAB”并通过电子邮件发送正确的公司。 我已经看过但找不到任何有效的东西。

有什么想法吗?

#!
#
LAB=3
#
if [ "$LAB" = "$1" ];then
    echo "Got Zumbrota" && ./mailZ 
fi
#
if [ "$LAB" = "$2" ];then
    echo "Got Barron" && ./mailB 
fi
#
if [ "$LAB" = "$3" ];then
    echo "Got Stearns" && ./mailS
fi

【问题讨论】:

  • 将 shebang 更改为 #!/bin/bash -x 并查看输出。如果您在比较数字,请通读this page
  • "$3" 是传递给脚本的第三个参数“3”是值 3。

标签: bash if-statement var


【解决方案1】:

如果这是一个 bash 脚本,请以

开头
#!/bin/bash

并使用-eq 进行整数比较,因为 LAB 在您的脚本中是一个整数

if [ $LAB -eq $1 ]

【讨论】:

  • $1 不是值1,而是函数/脚本的第一个参数。使用[ $LAB -eq 1 ]。并且使用内置的[[ 比使用[ 更好。即if [[ $LAB -eq 1 ]]
  • 至少在较新版本的 bash 中,test, [...] and [[...]] 都是内置的。
  • @William: 是的,但是test[ 必须与它们的非内置版本兼容,所以它们有一些愚蠢的行为。 [[ 不仅是内置的,而且实际上是特殊的,所以它。 . .好吧,它也有一些愚蠢的行为,但没有那么多。
  • @ruakh: [[...]] 通常也更快,但内置并不是它曾经的决定因素。 (在适当的地方使用 case...esac 仍然比所有这些都快,并且非常便携。)
  • 感谢大家的意见
【解决方案2】:

这些级联的 if 语句可以压缩成一个 case 语句:

case "$LAB" in
1)  echo "Got Zumbrota" && ./mailZ 
    ;;
2)  echo "Got Barron" && ./mailB 
    ;;
3)  echo "Got Stearns" && ./mailS
    ;;
*)  echo "don't know what to do with $LAB"
    ;;
esac

【讨论】:

    猜你喜欢
    • 2020-04-15
    • 2017-05-26
    • 1970-01-01
    • 2012-06-30
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    相关资源
    最近更新 更多