Site Tools


marc:linux:bash_snippets

This is an old revision of the document!


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.1675958558.txt.gz · Last modified: (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki