次
のように、開いて閉じる機能を持つシェルスクリプトを作成したいと思います。
echo -e "Activated!"
第二:
echo -e "Deactivated!"
これを行う方法はありますか?
ベストアンサー1
これは、アクティブ化の現在の状態を保存する必要があることを意味します。
最も簡単な方法は、「on」または「active」のいずれかの状態のファイルを作成し、別の状態(「off」または「deactivated」)に入ったときにファイルを削除することです。
完了を使用して空のファイルを作成し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"
スクリプトは、各実行の終わりにinを介して変数を保存し、最初にファイルをインポートし(存在する場合)そこstate
から変数を$HOME/.script.state
読み込みますdeclare -p state
。bash
ファイルは次のように見えます。
declare -- state="off"
declare -p state
これは$state
if is the stringの出力です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"
...ステータスの読み取りと書き込みをandに置き換えると、ステータスread
文字printf
列自体のみがステータスファイルに保存されます。