Compare commits

13 Commits

Author SHA1 Message Date
Phani Pavan K
0d0b3477cd lowercase usernames
All checks were successful
/ Lint Check Shellscripts (push) Successful in 16s
/ Lint Check Shellscripts (pull_request) Successful in 12s
2026-01-13 20:32:34 +05:30
Phani Pavan K
e1f056a294 run only as root, remove read loop, add double question for deluser
All checks were successful
/ Lint Check Shellscripts (push) Successful in 28s
/ Lint Check Shellscripts (pull_request) Successful in 11s
2026-01-13 19:32:19 +05:30
e4f761b133 lint fixed
All checks were successful
/ Lint Check Shellscripts (push) Successful in 12s
/ Lint Check Shellscripts (pull_request) Successful in 11s
2026-01-12 09:20:20 +05:30
aa297095b0 lint error corrected
Some checks failed
/ Lint Check Shellscripts (push) Failing after 16s
/ Lint Check Shellscripts (pull_request) Failing after 11s
2026-01-12 09:19:32 +05:30
104a59c52c Merge branch 'master' into jbomb-automate
Some checks failed
/ Lint Check Shellscripts (push) Failing after 11s
/ Lint Check Shellscripts (pull_request) Failing after 11s
2026-01-11 10:15:06 +00:00
a3ccb1f3b4 lint scripts
All checks were successful
/ Lint Check Shellscripts (push) Successful in 31s
2026-01-11 10:24:20 +05:30
29adac2e70 Merge branch 'master' into jbomb-automate
Some checks failed
/ Lint Check Shellscripts (push) Failing after 11s
/ Lint Check Shellscripts (pull_request) Failing after 11s
2026-01-06 11:33:00 +00:00
9c56e9b87a Update .gitea/workflows/lint.yaml
Some checks failed
/ Lint Check Shellscripts (push) Failing after 12s
2026-01-06 11:32:23 +00:00
f01555b0e5 Update .gitea/workflows/lint.yaml
Some checks failed
/ Lint Check Shellscripts (push) Failing after 10s
2026-01-06 11:31:15 +00:00
2bf64689db Update .gitea/workflows/lint.yaml
Some checks failed
/ Lint Check Shellscripts (push) Failing after 10s
2026-01-06 11:30:35 +00:00
e66abe2467 Update .gitea/workflows/lint.yaml
Some checks failed
/ Lint Check Shellscripts (push) Failing after 13s
2026-01-06 11:28:41 +00:00
364d967b8f Update .gitea/workflows/lint.yaml 2026-01-06 11:28:10 +00:00
46bfeaa6fe Update .gitea/workflows/lint.yaml
Some checks failed
/ Lint Check Shellscripts (push) Failing after 14s
2026-01-06 11:24:50 +00:00
3 changed files with 85 additions and 66 deletions

View File

@@ -6,8 +6,13 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Install Linter
run: |
wget -qO- 'https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.linux.aarch64.tar.xz' | tar -xJv
cp 'shellcheck-v0.11.0/shellcheck' /usr/local/bin
rm -rf "shellcheck-v0.11.0"
shellcheck --version
- name: Run Linter - name: Run Linter
uses: Azbagheri/shell-linter@latest run: |
with: shellcheck --exclude=SC1090,SC2046 penv
path: "jconf,penv" shellcheck --exclude=SC1090,SC2046 jconf

88
jconf Normal file → Executable file
View File

@@ -39,59 +39,73 @@ if [ "$#" -lt 1 ]; then
exit 1 exit 1
fi fi
if [[ "$EUID" -ne 0 ]]; then
echo "Run the script as root"
exit 2
fi
cmd=$1 cmd=$1
case "$cmd" in case "$cmd" in
adduser) adduser)
USER=$(echo "$2" | tr "[:upper:]" "[:lower:]")
exist=$(awk -F: -v username="$2" '{if ($1 == username && $3 >= 1000 && $1 != "nobody") {print 1; found=1; exit}} END {if (!found) print 0}' /etc/passwd) exist=$(awk -F: -v username="$USER" '{if ($1 == username && $3 >= 1000 && $1 != "nobody") {print 1; found=1; exit}} END {if (!found) print 0}' /etc/passwd)
if [ "$exist" -eq 1 ]; then if [ "$exist" -eq 1 ]; then
echo "$2 user already exists" echo "$USER user already exists"
else else
while true; do read -rp "Do you want to create an user account $USER [y/N]:" yn
read -p "Do you want to create an user account $2 [Y/n]:" yn case $yn in
case $yn in [Yy])
[Yy]* ) useradd "$USER"
useradd $2; echo "Enter the password for $USER"
echo "Enter the password for $2:"; passwd "$USER"
passwd $2 echo "$USER user account created successfully"
echo "$2 user account created successfully"; ;;
break;; [Nn])
[Nn]* ) exit 1;; exit 1
* ) echo "Please answer Y or N.";; ;;
esac * )
done echo "Please answer Y or N."
;;
esac
fi fi
exit 1 exit 1
;; ;;
deluser) deluser)
USER=$(echo "$2" | tr "[:upper:]" "[:lower:]")
exist=$(awk -F: -v username="$2" '{if ($1 == username && $3 >= 1000 && $1 != "nobody") {print 1; found=1; exit}} END {if (!found) print 0}' /etc/passwd) exist=$(awk -F: -v username="$USER" '{if ($1 == username && $3 >= 1000 && $1 != "nobody") {print 1; found=1; exit}} END {if (!found) print 0}' /etc/passwd)
if [ "$exist" -eq 0 ]; then if [ "$exist" -eq 0 ]; then
echo "$2 user doesn't exist" echo "$USER user doesn't exist"
exit 1 exit 1
else else
read -rp "Do you want to delete $USER user account? [y/N]:" yn
while true; do case $yn in
read -p "Do you want to delete $2 user account? [Y/n]:" yn [Yy])
case $yn in ;;
[Yy]* ) *)
userdel -rRZ $2; exit 1
echo "$2 user account deleted successfully"; ;;
break;; esac
[Nn]* ) exit 1;; read -rp "This DELETES $USER's data, are you sure? [y/N]:" yn
* ) echo "Please answer yes or no.";; case $yn in
esac [Yy])
done userdel -rRZ "$USER";
echo "$USER user account deleted successfully"
;;
[Nn])
exit 1
;;
* )
echo "Please answer Y or N."
;;
esac
fi fi
exit 1 exit 1
;; ;;
listusers|ls)
listusers) husers=$(awk -F: '{ if ($3 >= 1000 && $1 != "nobody" ) {print $1}}' /etc/passwd)
husers= awk -F: '{ if ($3 >= 1000 && $1 != "nobody" ) {print $1}}' /etc/passwd echo "$husers"
echo $husers
;; ;;
start) start)
echo echo
;; ;;

50
penv
View File

@@ -43,7 +43,7 @@ create(){
exit 2 exit 2
fi fi
if [[ -d "$HOME/.envs/$name" ]]; then if [[ -d "$HOME/.envs/$name" ]]; then
echo Environment \"$name\" already exists. echo Environment \""$name"\" already exists.
exit 4 exit 4
fi fi
@@ -52,18 +52,18 @@ create(){
echo "Base python3 not found on your system. Install it using your package manager" echo "Base python3 not found on your system. Install it using your package manager"
exit 3 exit 3
fi fi
vers=`/usr/bin/python3 -V | cut -d " " -f 2 | cut -d "." -f 1,2` vers=$(/usr/bin/python3 -V | cut -d " " -f 2 | cut -d "." -f 1,2)
echo "No version mentioned, using Python $vers" echo "No version mentioned, using Python $vers"
fi fi
if [ ! -f /usr/bin/python$vers ]; then if [ ! -f /usr/bin/python"$vers" ]; then
echo "Python $vers not installed on system." echo "Python $vers not installed on system."
exit 7 exit 7
fi fi
mkdir -p $HOME/.envs mkdir -p "$HOME"/.envs
/usr/bin/python$vers -m venv $HOME/.envs/$name /usr/bin/python"$vers" -m venv "$HOME"/.envs/"$name"
source $HOME/.envs/$name/bin/activate source "$HOME"/.envs/"$name"/bin/activate
python -m pip install ipykernel ipywidgets > /dev/stderr python -m pip install ipykernel ipywidgets > /dev/stderr
python -m ipykernel install --user --name $name > /dev/stderr python -m ipykernel install --user --name "$name" > /dev/stderr
echo echo
echo "Created \"$name\". It should be available as a Jupyter Kernel." echo "Created \"$name\". It should be available as a Jupyter Kernel."
echo "Use \"pact $name\" to activate in command line." echo "Use \"pact $name\" to activate in command line."
@@ -81,12 +81,12 @@ delete(){
echo "Run \"deactivate\" to deactivate it" echo "Run \"deactivate\" to deactivate it"
exit 6 exit 6
fi fi
read -n 1 -p "Remove environment $name (y/N)? " choise read -r -n 1 -p "Remove environment $name (y/N)? " choise
case $choise in case $choise in
[yY]) [yY])
source $HOME/.envs/$name/bin/activate source "$HOME"/.envs/"$name"/bin/activate
echo echo
echo Spec `jupyter-kernelspec remove -f -y $name` echo Spec $(jupyter-kernelspec remove -f -y "$name")
deactivate deactivate
rm -r "$HOME/.envs/$name" rm -r "$HOME/.envs/$name"
echo "Data Removed $HOME/.envs/$name" echo "Data Removed $HOME/.envs/$name"
@@ -114,7 +114,7 @@ delete(){
# } # }
activate() { activate() {
echo Use \"pact $1\" echo Use \"pact "$1"\"
} }
list(){ list(){
@@ -122,7 +122,7 @@ list(){
echo "PENV not initialized. Run \"penv init\"" echo "PENV not initialized. Run \"penv init\""
exit 8 exit 8
fi fi
ls $HOME/.envs ls "$HOME"/.envs
} }
install() { install() {
@@ -130,8 +130,8 @@ install() {
echo PENV already installed echo PENV already installed
exit 10 exit 10
fi fi
cp $(realpath "$0") $HOME/.local/bin/ cp $(realpath "$0") "$HOME"/.local/bin/
mkdir -p $HOME/.envs/ mkdir -p "$HOME"/.envs/
echo " echo "
pact () { pact () {
if [[ -z \"\$1\" ]]; then if [[ -z \"\$1\" ]]; then
@@ -144,17 +144,17 @@ install() {
fi fi
. \$HOME/.envs/\$1/bin/activate . \$HOME/.envs/\$1/bin/activate
} }
" > $HOME/.envs/.penv.funcs " > "$HOME"/.envs/.penv.funcs
grep -qxF "source \$HOME/.envs/.penv.funcs" $HOME/.bashrc || echo "source \$HOME/.envs/.penv.funcs" >> $HOME/.bashrc grep -qxF "source \$HOME/.envs/.penv.funcs" "$HOME"/.bashrc || echo "source \$HOME/.envs/.penv.funcs" >> "$HOME"/.bashrc
echo "Initialized PENV. Restart the shell" echo "Initialized PENV. Restart the shell"
} }
uninstall() { uninstall() {
if [[ ! -z "$VIRTUAL_ENV" ]]; then if [[ -n "$VIRTUAL_ENV" ]]; then
echo "Deactivate the existing environment before uninstalling" echo "Deactivate the existing environment before uninstalling"
exit 11 exit 11
fi fi
read -n 1 -p "REALLY UNINSTALL ALL THE ENVIRONMENTS?(y/N) " ans read -r -n 1 -p "REALLY UNINSTALL ALL THE ENVIRONMENTS?(y/N) " ans
case $ans in case $ans in
[yY]) [yY])
echo echo
@@ -170,9 +170,9 @@ uninstall() {
return; return;
;; ;;
esac esac
sed -i "/source \$HOME\/.envs\/.penv.funcs/d" $HOME/.bashrc sed -i "/source \$HOME\/.envs\/.penv.funcs/d" "$HOME"/.bashrc
rm -r $HOME/.envs rm -r "$HOME"/.envs
rm $HOME/.local/bin/penv rm "$HOME"/.local/bin/penv
echo "Uninstalled PENV" echo "Uninstalled PENV"
} }
@@ -186,16 +186,16 @@ cmd=$1
case "$cmd" in case "$cmd" in
new|mk) new|mk)
create $2 $3 create "$2" "$3"
;; ;;
del|rm) del|rm)
delete $2 delete "$2"
;; ;;
# setdef|sd) # setdef|sd)
# setdef $2 # setdef $2
# ;; # ;;
act|ac) act|ac)
activate $2 activate "$2"
;; ;;
list|ls) list|ls)
list list
@@ -212,7 +212,7 @@ case "$cmd" in
;; ;;
*) *)
echo "invalid command: \"$1\"" >&2 echo "invalid command: \"$1\"" >&2
echo $SCRIPT echo "$SCRIPT"
usage usage
;; ;;
esac esac