#!/usr/bin/env bash # device="brother5:bus2;dev2" device=$(scanimage -f "%d%n" | grep brother5 | head -n 1) echo "Selecting scanner '$device'" # option values for the brother DS-740D scanner simplex_source='Automatic Document Feeder(left aligned)' duplex_source='Automatic Document Feeder(left aligned,Duplex)' color_mode='24bit Color[Fast]' bw_mode='Black & White' grayscale_mode='True Gray' valid_resolutions=("100" "150" "200" "300" "400" "600" "1200") # default options for scanning sides=$simplex_source mode='c' resolution='300' current_page=$(find "$PWD" -name "out*.pdf" | sort | tail -n 1); read -r current_pageno <<<"${current_page//[^0-9]/ }" current_pageno=${current_pageno:-0} next_out_file="out$((current_pageno+1)).pdf" scan() { usage() { echo "scanbuddy.bash scan -d -r -b " } while getopts "dr:c:" flag; do case ${flag} in d) echo "Scanning duplex" sides=$duplex_source ;; r) if [[ ! " ${valid_resolutions[*]} " =~ [[:space:]]${OPTARG}[[:space:]] ]]; then echo "Resolution '$OPTARG' not supported!" echo "Supported resolutions: $(printf %s "${valid_resolutions[*]}")" exit 1 fi resolution=$OPTARG ;; c) mode=$OPTARG ;; *) ;; esac done case $mode in c) scanner_mode=$color_mode ;; b) scanner_mode=$bw_mode ;; g) scanner_mode=$grayscale_mode ;; *) echo "Mode '$mode' not supported! Supported modes: (c)olour|(b)lack & white|(g)reyscale" ;; esac echo "Scanning to '$next_out_file'..." scanimage \ --device-name=$device \ --format=pdf \ --output-file="$next_out_file" \ --mode="$scanner_mode" \ --resolution="$resolution" \ --source="$sides" \ -x 210 -y 297 # A4 } case "$1" in scan) scan "${@:2}" ;; *) echo "Usage: scanbuddy" ;; esac