영구 변수 생성

영구 변수 생성

쉘에서 "영구 변수"를 설정할 수 있습니까? 예를 들어, 로그인할 때 "안녕하세요 사용자님, 이것은 귀하의 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

당신은 할 수 없습니다. 하지만 이를 위해 사용자가 로그인할 때마다 특정 폴더에 파일을 생성하거나, 사용자가 로그인할 때마다 파일에 한 줄을 추가하는 등 다양한 트릭을 사용할 수 있습니다. 구현하기는 쉽지만 장거리 달리기에는 비효율적입니다. 보다 효율적인 작업은 숫자를 파일에 쓰고 변경하는 것입니다. 그러나 파일이 원하는 방식으로 구성되어 있고 숫자가 예상한 위치에 있는지 확인해야 합니다. 이는 해킹이므로 완벽하지는 않지만(악의적인 사용자가 수정할 수 있음) 문제를 해결하는 데는 충분합니다.

다음을 사용하여 행 수를 계산할 수 있습니다.wc -l

답변3

Matthew Rock의 답변은 다른 답변과 마찬가지로 훌륭하지만 Matthew가 지적했듯이 사용자는 숫자를 변경할 수 있습니다. 이를 방지하는 한 가지 방법은 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

관련 정보