Я только что начал использовать удар недавно, и я испытываю затруднения из-за простой команды. Вот сценарий:
#!/bin/bash
if TouchpadOff=0; then
synclient TouchpadOff=1
echo "Touchpad has been turned off"
else
synclient TouchpadOff=0
echo "Touchpad has been turned on"
fi
В основном то, что я пытаюсь сделать, переключить клавиатуру для выключения или включения в зависимости от того, включено ли это в настоящее время или выключено. Когда клавиатура работает, выполнение сценария выключает ее, который является тем, что я хочу, чтобы она сделала.
Но по некоторым причинам, когда я выполняю его снова для включения клавиатуры, это все еще выключено, и все еще echos "Сенсорная панель был выключен", даже когда я хочу, чтобы это включило. Я надеюсь, что кто-то может помочь мне с моим вопросом.Спасибо!
Проблема в том, что ваше условие if неверно. Он не делает то, что, как вы думаете, он делает.
if TouchpadOff=0; then
Это запускает TouchpadOff=0
как команду оболочки, которая создает переменную $TouchpadOff
и присваивает ей значение 0
. Поскольку это обычно должно выполняться успешно, в результате условие всегда выполняется.
Вам нужно будет вызвать команду synclient
и проанализировать ее вывод, чтобы проверить состояние свойства TouchpadOff, например, например. таким образом:
if [[ "$(synclient | grep 'TouchpadOff' | awk '{print $3}')" -eq 0 ]] ; then
Это запустит synclient | grep 'TouchpadOff' | awk '{print $3}'
, который анализирует выходные данные synclient
для строки, содержащей «TouchpadOff», и возвращает третий столбец этой строки.
Он находится внутри подстановки команд $( ... )
, так что вся часть будет заменена выводом внутренней команды.
Затем [[ ... -eq 0 ]]
проверяет, равен ли замещенный вывод 0 и делает это условием для оператора if.
TouchpadOff=0
как условие интерпретируется как присваивание, поэтому оно всегда верно (если переменная только для чтения).
Использовать числовое сравнение:
if (( TouchpadOff == 0 )) ; then