シェルで「永続変数」を設定できますか?たとえば、ログイン時に「こんにちはユーザー、これはあなたの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-bash
githubからファイルをダウンロードします。:
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