在Ubuntu 12.04中使用终端无法理解bash中的脚本

时间:2014-08-11 06:25:32

标签: bash

任何人都可以告诉我这个脚本在.sh文件中的含义是什么:

[ ! -n "$T_R" ] && echo "Message Appear" && exit 1;

2 个答案:

答案 0 :(得分:2)

编辑:纠正由tripleee指出的错误信息

括号[ ]     是'test'的别名,它测试是否满足条件。不要使问题复杂化,但请注意,这与bash shell关键字[[ ]]是分开的(谢谢,tripleee用于清除它!)。请参阅This post for further details.这些天,大多数人似乎都使用后者,因为它具有更强大的功能集。

在括号之间,脚本正在测试以确定变量"$T_R"是否为空字符串。

  • 如果作为参数传递给它的字符串的长度非空,则-n运算符返回true。
  • !反转案例(如果结果则测试成功 真)。所以在这种情况下,如果test的长度为"$T_R"则超过(返回0) 字符串变量&& **不是非零**(即如果是 变量是一个空字符串,或者是不存在的。)

双号& "$T_R"运算符表示只有在成功的情况下才执行后续代码,因此只有在测试成功的情况下才会回显消息“Message Appear” (再次,如果&& exit 1为空或未设置)。

最后,bash表示在成功回显消息显示消息后退出返回状态1。

test和{{1}}手册页对所有这些主题都非常有帮助,有关详细信息,请参阅。

答案 1 :(得分:1)

链式&&是一种常见的短路习语。

而不是写

if true; then
  if true; then
    echo moo
  fi
fi

您可以缩写为true && true && echo moo

echo通常会成功,因此如果true && echo moo && exit 1成功,echoexit都会同时执行(显然它总是会这样)。

(可能会出现true失败的极端情况,但如果发生这种情况,无论如何都要干杯,所以我认为不要试图防范这些事情。)

echo[的别名,它是shell脚本的一般比较助手(在Bash中,它甚至是内置的)。 test检查字符串是否为非空。

test -n是一般否定运算符,因此它将测试反转为检查空字符串。

(这有点单一,因为有一个单独的!专门检查字符串是否为空。)