Try wget https://bash.commongrounds.cc/uploads/1751249544_faxgram.sh
from the console
#!/bin/bash # Prompt for text file if not provided if [[ -z "$1" ]]; then read -p "Enter the text file to fax (e.g., pr1.txt): " txt_file if [[ -z "$txt_file" || ! -f "$txt_file" ]]; then echo "Error: Text file not specified or not found" exit 1 fi else txt_file="$1" if [[ ! -f "$txt_file" ]]; then echo "Error: Text file $txt_file not found" exit 1 fi fi # Prompt for CSV file if not provided if [[ -z "$2" ]]; then read -p "Enter the CSV file with fax numbers (e.g., cpress.csv): " csv_file if [[ -z "$csv_file" || ! -f "$csv_file" ]]; then echo "Error: CSV file not specified or not found" exit 1 fi else csv_file="$2" if [[ ! -f "$csv_file" ]]; then echo "Error: CSV file $csv_file not found" exit 1 fi fi # Check if efax is installed if ! command -v efax &> /dev/null; then echo "Error: efax not installed" exit 1 fi # Array to store busy fax numbers declare -a busy_numbers # Function to validate phone number (basic check for digits, +, -, spaces, and parentheses) is_valid_phone() { local number="$1" # Remove non-digit characters for validation local cleaned=$(echo "$number" | tr -d '[:space:]+-()') if [[ $cleaned =~ ^[0-9]{7,15}$ ]]; then return 0 else return 1 fi } # Function to send fax send_fax() { local number="$1" local file="$2" local attempt="$3" echo "Attempting to send fax to $number (Attempt $attempt)..." # Run efax command efax -d /dev/ttyS1 -t "T$number" "$file" > efax.log 2>&1 local status=$? # Check efax exit status case $status in 0) echo "Fax sent successfully to $number" return 0 ;; 1) echo "Fax to $number failed: busy or device in use" return 1 ;; *) echo "Fax to $number failed with error code $status. Check efax.log" return 2 ;; esac } # Main processing loop process_fax_numbers() { local attempt="$1" local fax_numbers=("${@:2}") local temp_busy=() for number in "${fax_numbers[@]}"; do if is_valid_phone "$number"; then if send_fax "$number" "$txt_file" "$attempt"; then # Success, continue to next number continue else # Check if failure was due to busy signal if grep -q "busy" efax.log; then temp_busy+=("$number") fi fi else echo "Skipping invalid phone number: $number" fi done # Update busy_numbers array busy_numbers=("${temp_busy[@]}") } # Read fax numbers from column 4 of csv_file mapfile -t fax_numbers < <(awk -F',' '{print $4}' "$csv_file" | tail -n +2 | tr -d '[:space:]"') # First attempt echo "Starting first fax attempt..." process_fax_numbers 1 "${fax_numbers[@]}" # Retry busy numbers if [[ ${#busy_numbers[@]} -gt 0 ]]; then echo "Retrying ${#busy_numbers[@]} busy numbers..." process_fax_numbers 2 "${busy_numbers[@]}" else echo "No busy numbers to retry." fi # Final status if [[ ${#busy_numbers[@]} -gt 0 ]]; then echo "The following numbers still failed after retry:" printf '%s\n' "${busy_numbers[@]}" else echo "All faxes either sent successfully or failed for non-busy reasons." fi # Clean up rm -f efax.log exit 0BASH to Home