条件句未正确测试

时间:2018-09-12 05:54:37

标签: bash syntax

我有这个脚本,该脚本在我的Ubuntu计算机每次唤醒并进入睡眠状态时都运行。

#!/bin/sh
if [ "${1}" == "pre" ]; then
  # Do the thing you want before suspend here, e.g.:
  echo "we are suspending at $(date)..." > /home/albin/stuff/suspend_test
elif [ "${1}" == "post" ]; then
  # Do the thing you want after resume here, e.g.:
  echo "...and we are back from $(date)" >> /home/albin/stuff/suspend_test
else
  echo ".2..neither pre or post . $1 .   $(date)" >> /home/albin/stuff/suspend_test
fi

这在输出文件中找到:

.2..neither pre or post . pre .   tis 11 sep 2018 20:44:42 CEST
.2..neither pre or post . post .   tis 11 sep 2018 20:45:06 CEST
.2..neither pre or post . pre .   tis 11 sep 2018 22:12:52 CEST
.2..neither pre or post . post .   ons 12 sep 2018 06:55:21 CEST
.2..neither pre or post . pre .   ons 12 sep 2018 06:55:22 CEST
.2..neither pre or post . post .   ons 12 sep 2018 06:55:43 CEST
.2..neither pre or post . pre .   ons 12 sep 2018 07:13:28 CEST
.2..neither pre or post . post .   ons 12 sep 2018 07:14:00 CEST

我已经检查了多篇有关如何编写bash条件语句的指南,而没有发现任何问题。 $ 1变量可用,但在if语句中被忽略

3 个答案:

答案 0 :(得分:6)

您在==中使用的是=而不是[ ],但这是一种bashism。 Ubuntu的最新版本将破折号用作/ bin / sh,并且不支持==;它得到一个错误,解释为测试失败:

$ if [ foo == foo ]; then echo "The strings match"; else echo "The strings do *not* match"; fi
dash: 1: [: foo: unexpected operator
The strings do *not* match

解决方案:切换到=

$ if [ foo = foo ]; then echo "The strings match"; else echo "The strings do *not* match"; fi
The strings match

如果您要使用/bin/sh而不是/bin/bash,则确实需要提防bashisms。 the Ubuntu wiki中对此有很好的介绍。要么,要么切换到/ bin / bash。

P.s。如果您要使用bash扩展名,建议使用[[ ]]代替[ ]作为条件语句-它可以解决[ ]的大多数语法怪异之处,并添加一些有用的新内容模式和正则表达式匹配之类的功能。

答案 1 :(得分:0)

最有可能的是,我认为您在第4行上获得了错误的重定向输出。

必须是:

echo "we are suspending at $(date)..." >> /home/albin/stuff/suspend_test

代替

echo "we are suspending at $(date)..." > /home/albin/stuff/suspend_test

此外,我认为$ 1不等于'pre'或'post'。通过查看您发布的输出,我无法理解为什么这些字符串“ tis” “ on” 来自何处。

答案 2 :(得分:0)

此脚本的调用者可能会向您传递除post或pre之外的其他参数。 将日志写入更改为使用>>而不是>(以防止一直覆盖日志),并尝试在第一行添加echo“ $ {1}” >> >>日志,然后您可以查看脚本中获得了哪些参数