シェルスクリプト切り替え機能

シェルスクリプト切り替え機能


のように、開いて閉じる機能を持つシェルスクリプトを作成したいと思います。

echo -e "Activated!"  

第二:

echo -e "Deactivated!" 

これを行う方法はありますか?

ベストアンサー1

これは、アクティブ化の現在の状態を保存する必要があることを意味します。

最も簡単な方法は、「on」または「active」のいずれかの状態のファイルを作成し、別の状態(「off」または「deactivated」)に入ったときにファイルを削除することです。

完了を使用して空のファイルを作成しtouch filename、完了を使用してファイルが存在するかどうかをテストしますif [ -e filename ]; then ...; firm 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 statebash

ファイルは次のように見えます。

declare -- state="off"

declare -p stateこれは$stateif 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列自体のみがステータスファイルに保存されます。

おすすめ記事