Help with script to automate CUPS printer installs | Unix Linux Forums | UNIX for Dummies Questions & Answers

  Go Back    


UNIX for Dummies Questions & Answers If you're not sure where to post a UNIX or Linux question, post it here. All UNIX and Linux newbies welcome !!

Help with script to automate CUPS printer installs

UNIX for Dummies Questions & Answers


Closed Thread    
 
Thread Tools Search this Thread Display Modes
    #1  
Old 12-27-2012
aperfecthalo aperfecthalo is offline
Registered User
 
Join Date: Dec 2012
Last Activity: 27 December 2012, 12:53 PM EST
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
Help with script to automate CUPS printer installs

Good afternoon.

I'm rather new to bash scripting, and have probably bitten off a bit more than I can chew to be honest, but I work in a service desk-like environment where one of the main complaints is that it takes our staff a long time to set up network printers on our clients' servers. Being the only one who has dabbled in bash scripting previously, I have been given a task to make a script that will automate the creation of a number of entries in CUPS depending on a number of variables (in this case, manufacturer of printer, make of printer and how many printer trays will be installed). I've created a version that works for one make and model of printer, which works without issue.. The issue is where I've tried to give the users a "menu" of which models, manufacturers etc they can choose from.

Here is an initial snippet of the script, which is where I require the most help.. The end goal of this is to have three sections like this, one for each printer manufacturer, where the exact make and number of trays is chosen by the user - this will have the script choose which drivers etc to install.

My syntax might be horrid, and my tabulation maybe moreso, however please bear with me!


Code:
#!/bin/bash

# Declare CUPS driver variables
LJ1300=sog_hp_lj1300.ppd
B4350MF=sog_oki_b4350_mf.ppd
B4350T1=sog_oki_b4350_t1.ppd
B4350T2=sog_oki_b4350_t2.ppd
B4600T1=sog_oki_b4600_t1.ppd
B4600T2=sog_oki_b4600_t2.ppd
B6200T1=sog_oki_b6200_t1.ppd
B6200T2=sog_oki_b6200_t2.ppd
B6200T3=sog_oki_b6200_t3.ppd
B6250T1=sog_oki_b6250_t1.ppd
B6250T2=sog_oki_b6250_t2.ppd
B6250T3=sog_oki_b6250_t3.ppd
B6500T1=sog_oki_b6500_t1.ppd
B6500T2=sog_oki_b6500_t2.ppd
B710T1=sog_oki_b710_t1.ppd
B710T2=sog_oki_b710_t2.ppd
B710T3=sog_oki_b710_t3.ppd
C330=sog_oki_c330dn.ppd
C3400=sog_oki_C3400.ppd
C3600=sog_oki_c3600.ppd
TSP700=sog_star_tsp700.ppd
LJ1300=sog_hp_lj1300.ppd
LJ2605=sog_hp_2605.ppd
LJ4300T1=sog_hp_lj4300_t1.ppd
LJ4300T2=sog_hp_lj4300_t2.ppd
LJ4300T3=sog_hp_lj4300_t3.ppd
LJ4300T4=sog_hp_lj4300_t4.ppd
RICOHMF=sog_ricoh_sp3410dn_mf.ppd
RICOHT1=sog_ricoh_sp3410dn_t1.ppd
RICOHT2=sog_ricoh_sp3410dn_t2.ppd
# ----------------------------------------
# Make sure only root can run the script
if [ "$(id -u)" != "0" ]; then

    echo "
    Only Root can run this script
          Press OK
    "
   exit 1
fi

# ----------------------------------------

clear
    echo '************************************************************************'
    echo '*                  ******* W A R N I N G! *******                      *'
    echo '*                                                                      *'
    echo '*      You are starting the NETWORK printer installation script        *'
    echo '*  This process will install a printer on the destination server       *'
    echo '*  Please make sure this is run on the SERVER and not the CLIENT.      *'
    echo '*                                                                      *'
    echo '*  Do you wish to continue?  (Type the entire word "yes" to proceed.)  *'
    echo '*                                                                      *'
    echo '************************************************************************'
    read -p "Proceed with install? " response
    echo
# --------------------------------
if [ "$response" != "yes" ]; then
    exit 1
    else
    clear

# ----------------------------------------
# Choose make/model of printer

    clear
    echo "**************************************************************************"
    echo "* Select the manufacturer of the printer in question:                        *"
    echo "* [1] OKI                                                                    *"
    echo "* [2] HP                                                                    *"
    echo "* [3] Ricoh                                                                *"
    echo "**************************************************************************"
    read -p "* Please enter option [1 - 3] * " option
    
    case $option in
        "1")  clear
        echo "**************************************************************************"
      echo "* Select the model of the OKI printer:                                  *"
      echo "* [1] B4350                                                                *"
      echo "* [2] B4600                                                                *"
      echo "* [3] B6200                                                                *"
      echo "* [4] B6250                                                                *"
      echo "* [5] B6500                                                                *"
      echo "* [6] B710                                                                *"
      echo "* [7] C330DN                                                            *"
      echo "* [8] C3400                                                                *"
      echo "* [9] C3600                                                                *"
      echo "**************************************************************************"
      read -p "* Please enter option [1 - 3] * " option-oki
        if [ "$option-oki" = "1" ]; then
            read -p "How many paper trays will this printer have? Enter MF/1/2 : " b4350-trays
                if [ "$4350-trays" = "MF" ]; then
                DRV1=$B4350MF
                elif [ "$4350-trays" = "1" ]; then
                DRV1=$B4350MF
                DRV2=$B4350T1
                elif [ "$4350-trays" = "2" ]; then
                DRV1=$B4350MF
                DRV2=$B4350T1
                DRV3=$B4350T2
            fi
        if [ "$option-oki" = "2" ]; then
                read -p "How many paper trays will this printer have? Enter MF/1/2 : " b4600-trays
                if [ "$4600-trays" = "MF" ]; then
                DRV1=$B4600MF
                elif [ "$4600-trays" = "1" ]; then
                DRV1=$B4600MF
                DRV2=$B4600T1
                elif [ "$4600-trays" = "2" ]; then
                DRV1=$B4600MF
                DRV2=$B4600T1
                DRV3=$B4600T2
            fi
        if [ "$option-oki" = "3" ]; then
                read -n "How many paper trays will this printer have? Enter 1/2/3 : " b6200-trays
                if [ "$6200-trays" = "1" ]; then
                DRV1=$B6200T1
                elif [ "$6200-trays" = "2" ]; then
                DRV1=$B6200T1
                DRV2=$B6200T2
                elif [ "$6200-trays" = "3" ]; then
                DRV1=$B6200T1
                DRV2=$B6200T2
                DRV3=$B6200T3
            fi
        if [ "$option-oki" = "4" ]; then
                read -p "How many paper trays will this printer have? Enter 1/2/3 : " b6250-trays
                if [ "$6250-trays" = "1" ]; then
                DRV1=$B6250T1
                elif [ "$6250-trays" = "2" ]; then
                DRV1=$B6250T1
                DRV2=$B6250T2
                elif [ "$6250-trays" = "3" ]; then
                DRV1=$B6250T1
                DRV2=$B6250T2
                DRV3=$B6250T3
            fi
        if [ "$option-oki" = "5"]; then
                read -p "How many paper trays will this printer have? Enter MF/1/2 : " b6500-trays
                if [ "$b6500-trays" = "1" ]; then
                DRV1=$B4600MF
                elif [ "$b6500-trays" = "2" ]; then
                DRV1=$B4600MF
                DRV2=$B4600T1
            fi
        if [ "$option-oki" = "6" ]; then
                read -p "How many paper trays will this printer have? Enter 1/2/3 : " b710-trays
                if [ "$b710-trays" = "1" ]; then
                DRV1=$B710T1
                elif [ "$b710-trays" = "2" ]; then
                DRV1=$B710T1
                DRV2=$B710T2
                elif [ "$b710-trays" = "3" ]; then
                DRV1=$B710T1
                DRV2=$B710T2
                DRV3=$B710T3
            fi
        if [ "$option-oki" = "7" ]; then
                DRV1=$C330
            fi
        if [ "$option-oki" = "8" ]; then
                DRV1=$C3400
            fi
        if [ "$option-oki" = "9" ]; then
                DRV1=$C3600
            fi
        else
            exit 1
        fi
    esac
# ----------------------------------------
# Test output
echo "Test output"
echo "${DRV1}"
echo "${DRV2}"
echo "${DRV3}"
exit 1

When running this, I'm getting a syntax error on line 181 (esac). Have I just messed up on my syntax, or is there something else amiss here?

Many thanks!
Sponsored Links
    #2  
Old 12-27-2012
RudiC RudiC is offline Forum Advisor  
Registered User
 
Join Date: Jul 2012
Last Activity: 31 October 2014, 12:14 PM EDT
Location: Aachen, Germany
Posts: 4,485
Thanks: 74
Thanked 1,099 Times in 1,035 Posts
You've gotten 17 if s in your code snippet but 11 fi s only, so I guess there sth. wrong with those. Taking a closer look, the if [ "$response" != "yes" ] seems to be missing one, but, more related to the syntax error that you quote, every if [ "$option-oki"...] has an unterminated if - elif - elif construct in it, which will bother bash if it reaches the esac statement. Pls correct and come back with the result.
BTW, did you consider bash's select statement to offer and read a selection? And, I'd prefer to put the respective options every printer offers into an option file that you can print out for selection and that you can easily adapt should a new printer model come in. Plus, why don't you collect e.g. all three-tray-printers into one single question (option_OKI between 1 and 6 -> ask for tray) and generate the printer driver name from the few variables read in answer?

Last edited by RudiC; 12-27-2012 at 12:37 PM..
Sponsored Links
    #3  
Old 12-27-2012
aperfecthalo aperfecthalo is offline
Registered User
 
Join Date: Dec 2012
Last Activity: 27 December 2012, 12:53 PM EST
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
Hi RudiC,

Thanks for the speedy response. I'll go through my code and amend the unterminated if/elif statments first - am I correct in thinking I'll simply need to add the second fi in after the last elif? Eg:


Code:
if [ "$option-oki" = "1" ]; then
            read -p "How many paper trays will this printer have? Enter MF/1/2 : " b4350-trays
                if [ "$4350-trays" = "MF" ]; then
                DRV1=$B4350MF
                elif [ "$4350-trays" = "1" ]; then
                DRV1=$B4350MF
                DRV2=$B4350T1
                elif [ "$4350-trays" = "2" ]; then
                DRV1=$B4350MF
                DRV2=$B4350T1
                DRV3=$B4350T2
            fi
    fi

If I'm wrong, apologies. I never thought of using select in all honesty, I (at least thought I) knew the if, so I decided to stick in my comfort zone. If it would make more sense using select, I'll look into that.

What do you mean by an options file? Sorry if I'm a bit slow.

Kind regards.
    #4  
Old 12-27-2012
RudiC RudiC is offline Forum Advisor  
Registered User
 
Join Date: Jul 2012
Last Activity: 31 October 2014, 12:14 PM EDT
Location: Aachen, Germany
Posts: 4,485
Thanks: 74
Thanked 1,099 Times in 1,035 Posts
I don't have a ready-to-use solution at hand, but I could imagine a file called OKIprinters contain the following lines with <TAB> separated columns:
Code:
B4350   MF/1/2  sog_oki_b4350_mf.ppd    sog_oki_b4350_t1.ppd    sog_oki_b4350_t2.ppd
B4600   MF/1/2  sog_oki_b4600_t1.ppd    sog_oki_b4600_t2.ppd
B6200   1/2/3   sog_oki_b6200_t1.ppd    sog_oki_b6200_t2.ppd    sog_oki_b6200_t3.ppd
B6250   1/2/3   sog_oki_b6250_t1.ppd    sog_oki_b6250_t2.ppd    sog_oki_b6250_t3.ppd
B6500   1/2     sog_oki_b6500_t1.ppd    sog_oki_b6500_t2.ppd
B710    1/2/3   sog_oki_b710_t1.ppd     sog_oki_b710_t2.ppd     sog_oki_b710_t3.ppd
C330DN  1       sog_oki_c330dn.ppd
C3400   1       sog_oki_C3400.ppd
C3600   1       sog_oki_c3600.ppd

, then a script containing
Code:
$ OKIS=$(cut -f1 OKIprinters)
$ select Pr in $OKIS; do echo $Pr, $REPLY; done
1) B4350
2) B4600
3) B6200
4) B6250
5) B6500
6) B710
7) C330DN
8) C3400
9) C3600
#? 3
B6200, 3

, and you could go on from there, select ing the trays, and then the drivers. If you got a new printer, add a line to your file(s), and it flies.
Sponsored Links
Closed Thread

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Samba and Cups :: How to Hide Printer Icons amit_spl Red Hat 1 04-27-2012 05:11 PM
Query for printer driver in CUPS kknigga UNIX for Dummies Questions & Answers 0 01-11-2011 04:14 PM
Script that can Automate Printer adding task in HP-UX servers AnilKPatnaik UNIX for Advanced & Expert Users 2 08-11-2009 11:04 AM
Sharing Printer Linux + XP (cups/samba) Alux Linux 2 03-14-2006 03:27 PM
Sharing printer with windows via cups and samba Spetnik UNIX for Dummies Questions & Answers 1 01-19-2004 01:43 PM



All times are GMT -4. The time now is 03:15 PM.