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
This script assumes that you have the sshpass package installed on your system. You can install it with the following command: sudo apt-get install sshpass (for Ubuntu) or brew install http://macappstore.org/sshpass/ (for macOS).
#!/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.1676028663.txt.gz · Last modified: (external edit)
