创建永久变量

创建永久变量

是否可以在shell中设置“永久变量”?例如,当我登录时,我想打印消息“Hello user, this is your xxx log in”

登录次数将存储在永久变量中,并且每次都会通过脚本递增,例如

#!/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

你不能。但是,您可以使用各种技巧来做到这一点,例如每次用户登录时在某个文件夹中创建一个文件,或者每次用户登录时向某个文件添加一行。这些很容易实现,但效率低下长跑。更有效的操作是将数字写入文件并更改它。但是,您必须确保文件的结构符合您的要求,并且数字位于您期望的位置。由于这些都是黑客行为,它们并不完美(恶意用户可以修改它们),但足以解决您的问题。

您可以使用以下方式计算行数wc -l

答案3

马修·洛克(Matthew Rock)的答案和其他答案一样很好,但就像马修指出的那样,用户可以更改这些数字。避免这种情况的一种方法是使用 PAM。

我会将以下行放入 /etc/pam.d/login

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

/usr/local/bin/{someshellscript}.sh可以使用变量,例如$PAM_USER给出用户名的变量。然后,在 shellscript 中,您可以访问用户不可写(并且可能不可读,取决于您想要的内容)的文件,并在该文件中密切关注所有用户以及他们登录的频率。我把编写该脚本作为练习留给读者;-)

答案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

相关内容