Sunday, June 7, 2026

Bash Script to read input file and skip all comments

example input file:

#Skip

DUMMY #Skip this after the name

#Skip

HOSTNAME 


#!/bin/bash

# Define color codes

RED='\033[1;31m'

GREEN='\033[1;32m'

BLUE='\033[1;34m'

MAGENTA='\033[1;35m'

NC='\033[0m' # No Color


LOCAL_DIR="/Users/username/Downloads/Uploads"

REMOTE_USER="username"

REMOTE_HOSTS="hosts"


MSG1="\nThis script will recursively copy directories and \nfiles from your local machine to remote hosts.\n"

MSG2="\tLocal Source: $LOCAL_DIR\n\tHost names stored in file: $REMOTE_HOSTS\n"

MSG3=""


[[ -n ${MSG1} ]] && echo -e "${MAGENTA}$MSG1 ${NC}"

[[ -n ${MSG2} ]] && echo -e "${BLUE}$MSG2 ${NC}"

[[ -n ${MSG3} ]] && echo -e "${MAGENTA}$MSG3 ${NC}"


if [[ ! -f "$REMOTE_HOSTS" ]]; then

echo -e "${MAGENTA}Error: Remote hosts file not found: $REMOTE_HOSTS${NC}"

exit 1

fi


if [ -d "$LOCAL_DIR" ] && [ "$(ls -I "$LOCAL_DIR")" ]; then

echo -e "${GREEN}Directory exists. Starting copy...${NC}"


while read REMOTE_HOST || [[ -n "$REMOTE_HOST" ]]; do

                #Remove anything after hashtag

REMOTE_HOST="${REMOTE_HOST%%#*}"

                #Remove leading & trailing whitespace

REMOTE_HOST="$(echo "$REMOTE_HOST" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"

[[ -z "$REMOTE_HOST" ]] && continue

echo "Processing host: $REMOTE_HOST"

scp -r "$LOCAL_DIR" "${REMOTE_USER}@${REMOTE_HOST}:~/."

if [ $? -eq 0 ]; then

echo -e "${GREEN}Copy completed successfully.${NC}"

else

echo -e "${RED}Error: Copy failed.${NC}"

fi

done <$REMOTE_HOSTS

else

echo -e "${RED}Directory does not exist or is empty: $LOCAL_DIR${NC}"

fi

No comments:

Post a Comment