marc:linux:bash_snippets
This is an old revision of the document!
Table of Contents
Some useful bash snippets:
If you declare variables, use lower case names!
Using math
expr 30 + 10 # 30 + 10 expr 30 - 10 # 30 - 10 expr 30 / 10 # 30 / 10 expr 30 \* 4 # 30 x 4, needs escape!
Checking if file exists:
if [[ -f ~/.ssh/id_rsa ]]
then
echo "id_rsa exists"
else
echo "id_rsa does not exist"
fi
Checking if directory exists:
if [[ -d ~/.ssh/ ]]
then
echo "directory .ssh exists"
else
echo "directory .ssh does not exist"
fi
Checking if variable equals 200
num = 200
if [[ $num -eq 200 ]]
then
echo "$num equals 200"
else
echo "$num does not equal 200"
fi
Ask for variable input:
# Read Password echo -n Password: read -s password echo # Run Command echo $password
Ecnrypting / Decrypting file:
A useful tool for encrypting/decrypting files is ccrypt. Using this you can make use of git containing things like SSH keys:
apt-get install ccrypt -y #install ccrypt ccencrypt ~/.ssh/id_rsa* #encrypt private key ccdecrypt id_rsa.cpt -P "Enter password to decrypt file: " #decrypt private key mv id_rsa ~/.ssh/ && chown -R user: ~/.ssh #move private key and set ownership chmod 600 ~/.ssh/id_rsa #set private key permissions
Install a list of programs:
progs=(
mc
iotop
htop
tmux
wget
ccrypt
openssh-server
)
for program in "${progs[@]}"; do
if ! command -v "$program" >/dev/null 2>&1; then
apt-get install "$program" -y
fi
done
A simple menu (ssh):
#!/bin/bash
clear
echo """
##################################################################################################
# #
# Welcome to sshmenu #
# #
# Which server would you like to connect to? #
# #
# 1) wekan (kanban) #
# 2) wiki #
# 3) nextcloud #
# 4) dockervm1 #
# 5) dockertestvm #
# #
##################################################################################################
input number:
"""
read -s server
echo $server
sleep 1
if [ $server = "1" ]; then
clear
echo "Setting up connection to wekan server..."
sleep 2
ssh 192.168.1.118
elif [ $server = "2" ]; then
clear
echo "Setting up connection to wiki server..."
sleep 2
ssh 192.168.1.117
elif [ $server = "3" ]; then
clear
echo "Setting up connection to nextcloud server..."
sleep 2
ssh 192.168.1.119
elif [ $server = "4" ]; then
clear
echo "Setting up connection to dockervm1 server..."
sleep 2
ssh 192.168.1.116
elif [ $server = "5" ]; then
clear
echo "Setting up connection to dockertestvm server..."
sleep 2
ssh 192.168.1.120
else
echo "Incorrect choice, programm will now terminate..."
sleep 3
clear
exit
fi
clear
exit
Conditional while loop:
if [ ! -f /usr/bin/zsh ]
then
while true; do
read -p "Would you like to install 'zsh'? (y/n) " yn
case $yn in
[Yy]* ) echo "OK, installing zsh...";
while read program; do
sudo apt install -y "$program"
done <zsh
break;;
[Nn]* ) echo "ZSH will not be installed"; break;;
* ) echo "Please answer yes or no.";;
esac
done
fi
Replace all files in a directory with empty files with the same name
#!/bin/bash
# Get the directory path
echo "Enter the path to the directory: "
read dir_path
# Check if the directory exists
if [ ! -d "$dir_path" ]; then
echo "Error: Directory does not exist."
exit 1
fi
# Replace all files in the directory with empty files
for file in "$dir_path"/*; do
if [ -f "$file" ]; then
> "$file"
fi
done
echo "All files in the directory have been replaced with empty files."
Find SSH logins
#!/bin/bash
servers_file="servers"
users_file="users"
passwords_file="passwords"
logins_file="logins.txt"
# Check if the input files exist
if [ ! -f "$servers_file" ] || [ ! -f "$users_file" ] || [ ! -f "$passwords_file" ]; then
echo "Error: One or more of the input files do not exist."
exit 1
fi
# Read the servers, users, and passwords into arrays
servers=($(cat "$servers_file"))
users=($(cat "$users_file"))
passwords=($(cat "$passwords_file"))
# Loop through all combinations of servers, users, and passwords
for server in "${servers[@]}"; do
for user in "${users[@]}"; do
for password in "${passwords[@]}"; do
# Try to ssh into the server with the current combination of user and password
ssh_output=$(sshpass -p "$password" ssh "$user"@"$server" -o StrictHostKeyChecking=no -o ConnectTimeout=3 2>&1)
# Check if the ssh login was successful
if [ "$?" -eq 0 ]; then
echo "Successful ssh login to $server using account $user and password $password"
echo "$server $user $password" >> "$logins_file"
else
echo "Failed ssh login to $server using account $user and password $password"
fi
done
done
done
marc/linux/bash_snippets.1675958637.txt.gz · Last modified: (external edit)
