LINUX.ORG.RU

Помогите написать правильный скрипт


1

1

В общем понадобился мне скрипт, что бы менять режим энергосбережения ноутбука переключая специальный тумблер на нем. Проблема в том, что этот переключатель, независимо от того переключил я его влево или вправо выводит один и тот же сигнал. Соответственно надо что бы по переключению скрип смотрел в файлик с параметром 1 или 0, и если там одно значение, то вызывал скрипт энергосбережения и менял затем параметр на другое значение. А если же там обратное значение, запускал скрипт производительности и опять менял значение. Скрипты я писать не умею. Но в связи с этой необходимостью начал изучать. И написал вот это

#!/bin/sh

STAT= 'cat /etc/smps/performance.pid'
 
   if [ "$STAT" = "0" ]
then
sh /usr/bin/acc_on.sh
echo "1" > /usr/bin/smps/performance.pid
  else
sh /usr/bin/smps/ac_off.sh
echo "0" > /usr/bin/smps/performance.pid
fi

Но не фига не работает. Разве что менят значение с 1 на ноль, но не обратно. Объяснить пожалуста как правильно сделать.


«0\n» != «0»

anonymous
()

Лучше проверять наличие некоторого файла:

#!/bin/sh
FILE=/var/lock/myacpi

[ -f "$FILE" ] && (sh /usr/bin/acc_on.sh; rm "$FILE") || (sh /usr/bin/acc_off.sh; touch "$FILE")
ziemin ★★
()

STAT= 'cat /etc/smps/performance.pid'

Кавычки не те и пробел лишний

anonymous
()

100$ и я тебе напишу невероятную херню на perl! А ещё у тебя в первой строчке кавычки неправильные, и ещё пробел после «равно» не нужен, а дальше вообще инденты разъехались.

DELIRIUM ☆☆☆☆☆
()

переключатель, независимо от того переключил я его влево или вправо выводит один и тот же сигнал

Вообще-то на клавиатуре много таких «переключателей»: «NumLock», «CapLock» и т.п., и все помнят свое состояние (см. xset -q).

arson ★★★★★
()
#!/bin/bash

STATUS_FILE=/var/run/my_power_mgmt.status
CMD_POWERSAVE_ON=/usr/bin/acc_on.sh
CMD_POWERSAVE_OFF=/usr/bin/acc_off.sh

STATUS=`head $STATUS_FILE`

# если пусто - тоже включаем энергосбережение
if [[ "$STATUS" == "0" ]] || [[ "$STATUS" == "" ]]
then
  echo "Turning power save mode on"
  $CMD_POWERSAVE_ON
  echo "1" > $STATUS_FILE
else
  echo "Turning power save mode off"
  $CMD_POWERSAVE_OFF
  echo "0" > $STATUS_FILE
fi

Самый лучший мануал по башу www.linux.org.ru/books/bash-conspect.html . За ним давно никто не ухаживает, даже сделать, чтоб открывался в корректной кодировке, некому. Но текст реально лучший.

Автору ещё нужно продумать, как разруливать ситуацию с выключением компа. Состояние в файле останется, но оно будет неактуально. Актуальность будет восстановлена после двух тыканий (хотя это смотря что делают скрипты), но это как-то неэлегантно.

Krieger_Od ★★
()
10 января 2014 г.
Ответ на: комментарий от Krieger_Od

Спасибо большое! Скрипт отлично работает! Правда стоило мне его настроить, как я обнаружил, что после недавнего обновления ядра acpi_listen начал выдавать разные значения. Соответственно, теперь тумблер влево - один скрипт, тумблер вправо - другой. Но всеравно большое спасибо. Так все просто и понятно написано, но стоит попытаться набросать такое самому - фигвам. Что ж, будем расти

xing
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.