永久変数の生成

永久変数の生成

シェルで「永続変数」を設定できますか?たとえば、ログイン時に「こんにちはユーザー、これはあなたのxxxログインです」というメッセージを印刷したいと思います。

ログイン数は永続変数に保存され、スクリプトによって毎回増加します。

#!/bin/bash
echo "Hello Mr. This is your $number log in"
$number=$(($number+1))

次のログインでは、増分変数を印刷して再度増分します。

これらの変数をどのように設定できますか?

答え1

私は次のように書くでしょう:

#!/bin/bash
file=$HOME/.login_count
number=$(<"$file")
echo "Hello Mr. This is your $number log in"
echo $((number+1)) > "$file"

答え2

あなたはできません。ただし、これを行うには、ユーザーがログインするたびに特定のフォルダにファイルを作成したり、ユーザーがログインするたびにファイルに1行を追加するなど、さまざまなトリックを使用できます。実装は簡単ですが、長距離走行には非効率的です。より効率的な作業は、数字をファイルに書き込んで変更することです。ただし、ファイルが目的の方法で構成されており、数字が期待どおりの場所にあることを確認する必要があります。これはハッキングなので完璧ではありませんが(悪意のあるユーザーが修正できる)、問題を解決するのに十分です。

以下を使用して行数を計算できます。wc -l

答え3

Matthew Rockの答えは他の答えと同様に優れていますが、Matthewが指摘したように、ユーザーは数字を変更できます。これを防止する1つの方法はPAMを使用することです。

/etc/pam.d/login に次の行を置きます。

session optional pam_exec.so /usr/local/bin/{someshellscript}.sh

/usr/local/bin/{someshellscript}.shユーザー名を提供する変数などの変数を使用できます$PAM_USER。その後、シェルスクリプトからユーザーが書き込めない(必要に応じて読み取れない)ファイルにアクセスし、そのファイルからすべてのユーザーとユーザーのログイン頻度を監視できます。私はそのスクリプトを読者に練習として残しています;-)

答え4

この投稿を参照してくださいhttps://unix.stackexchange.com/a/350163

関数を使用する永続変数kv-bash:

1) kv-bashgithubからファイルをダウンロードします。:

git clone https://github.com/damphat/kv-bash.git
cp -ar ./kv-bash/kv-bash /usr/local
chmod +x /usr/local/kv-bash

# Put this line in .bash_profile (optional)
source kv-bash

2) 試す

#let try create/modify/delete variable
kvset myEmail [email protected]
kvset myCommand "Very Long Long Long String"

#read the varible
kvget myEmail

#you can also use in another script with $(kvget myEmail)
echo $(kvget myEmail)

#delete variable
kvdel myEmail

関連情報