Это означает, что вам придется сохранить текущее состояние активации.
Самый простой способ сделать это — создать файл для одного из состояний (, возможно, для состояния «включено» или «активировано» ), и удалить этот файл при входе в другое состояние (. ] "выключено" или "деактивировано" ).
Создание пустого файла выполняется с помощью touch filename
, а проверка существования этого файла выполняется с помощью if [ -e filename ]; then...; fi
. Удалите файл с помощью rm filename
.
В приведенном ниже примере вы можете сохранить часть информации в этом состоянии, сохранив значение переменной в файле. В этом случае состояние передается постоянным файлом, который изменяется каждый раз, когда вы запускаете сценарий (, а не просто файлом, который либо создается, либо удаляется при каждом вызове вашего сценария ).
Если вы используетеbash
:
#!/bin/bash
statefile=$HOME/.script.state
if [ -f "$statefile" ]; then
. "$statefile"
fi
case $state in
on) state=off ;;
*) state=on
esac
printf 'Current state is "%s"\n' "$state"
declare -p state >"$statefile"
Тестирование:
$ bash script.sh
Current state is "on"
$ bash script.sh
Current state is "off"
$ bash script.sh
Current state is "on"
$ bash script.sh
Current state is "off"
Сценарий сохраняет переменную state
в $HOME/.script.state
с помощью declare -p state
в bash
в конце каждого запуска и считывает ее оттуда путем поиска этого файла в начале (, если файл существует ).
В конечном итоге этот файл будет выглядеть так:
declare -- state="off"
, который является результатом declare -p state
, если $state
является строкой off
.
С помощью /bin/sh
приведенный выше сценарий может быть записан как
#!/bin/bash
statefile=$HOME/.script.state
if [ -f "$statefile" ]; then
read state <"$statefile"
fi
case $state in
on) state=off ;;
*) state=on
esac
printf 'Current state is "%s"\n' "$state"
printf '%s\n' "$state" >"$statefile"
... просто заменив чтение и запись состояния на read
и printf
, что позволит сохранить только саму строку состояния в файле состояния.