【问题标题】:Shellscript: Pmset value as variable in else if scriptShellscript:Pmset 值作为 else if 脚本中的变量
【发布时间】:2019-03-23 20:15:40
【问题描述】:

我正在尝试编写一个 shellscript,它将在 Mac 上将休眠模式从 3 更改为 25,反之亦然。我尝试将“pmset -g | grep hibernatemode”命令的结果设置为 OUTPUT 变量(根据电源给出“hibernatemode 3”或“hibernatemode 25”结果)并将 HIBERNATE 变量设置为“hibernatemode 3 ”。因此,如果变量 OUTPUT 和 HIBERNATE 匹配,我希望它执行一个命令,该命令将更改该系统设置,但现在我只希望它使用 echo 命令显示它正在使用的命令。问题是无论我做什么,无论 OUTPUT 的值是什么,我都会得到“hibernatemode 25”。我对此真的很陌生,所以我可能缺少一个非常基本的东西。感谢您的帮助!

#!/bin/bash

OUTPUT="$(pmset -g | grep hibernatemode)"
HIBERNATE="hibernatemode 3"

echo $OUTPUT
echo $HIBERNATE

if [ $OUTPUT = $HIBERNATE ]
  then 
echo hibernatemode is 3
  else
echo hibernatemode is 25
fi

【问题讨论】:

  • 您需要对所有变量值进行双引号引用,尤其是 if [ "$OUTPUT" = "$HIBERNATE" ] 。而且我很惊讶您没有收到错误消息。而且我建议添加else echo "unknown value for hibmode=$OUTPUT" ; fi。祝你好运。

标签: macos shell hibernation hibernate-mode


【解决方案1】:

好的,我想通了。问题是 shell 命令的输出有一个 TAB 而不是 SPACE。我直接从终端复制了运行命令的输出。如果有人需要,工作的 shellscript 如下所示:

#!/bin/bash

OUTPUT="$(pmset -g | grep hibernatemode)"
HIBERNATE3=" hibernatemode        3"
HIBERNATE25=" hibernatemode        25"

if [ "$OUTPUT" = "$HIBERNATE3" ]

 then 
  pmset -b hibernatemode 25
  echo Hibernatemode set to 25 - DISK

elif [ "$OUTPUT" = "$HIBERNATE25" ]

 then
  pmset -b hibernatemode 3
  echo Hibernatemode set to 3 - RAM

else
  echo Unsuccessful!

fi

【讨论】:

  • 您可能会喜欢mode=$(pmset -g | awk '/hibernatemode/{print $2}'),然后是echo $modeif [ $mode -eq 3 ] ...
猜你喜欢
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 2015-11-09
  • 2017-02-08
  • 2016-03-27
  • 1970-01-01
  • 2021-09-14
  • 2013-11-25
相关资源
最近更新 更多