我有这个脚本,该脚本在我的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语句中被忽略
答案 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}” >> >>日志,然后您可以查看脚本中获得了哪些参数