• Guest, before posting your code please take these rules into consideration:
    • It is required to use our BBCode feature to display your code. While within the editor click < / > or >_ and place your code within the BB Code prompt. This helps others with finding a solution by making it easier to read and easier to copy.
    • Don't share a wall of code. All we want is the problem area, the code related to your issue.


    To learn more about how to use our BBCode feature, please click here.

    Thank you, Code Forum.

install.sh: 364: Syntax error: "(" unexpected (expecting "done")

Johna

King Coder
Staff Team
Guardian
Hi all,
I'm trying to install Canon printer drivers on my linux mint device.
I've downloaded the drivers from https://www.canon.co.uk/ (Canon i-SENSYS MF4730) and I'm trying to install it by running the install.sh
I've opened a terminal in the directory, and then I typed sh install.sh, but I get this error: install.sh: 364: Syntax error: "(" unexpected (expecting "done").
I don't know what it means or how to fix it.

Here's the install.sh's content.
Bash:
#!/bin/bash

##############################################################################
##
##  Canon Laser Printer Driver for Linux
##  Copyright CANON INC. 2015
##
##  This program is free software; you can redistribute it and/or modify
##  it under the terms of the GNU General Public License as published by
##  the Free Software Foundation; either version 2 of the License, or
##  (at your option) any later version.
##
##  This program is distributed in the hope that it will be useful,
##  but WITHOUT ANY WARRANTY; without even the implied warranty of
##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
##  GNU General Public License for more details.
##
##  You should have received a copy of the GNU General Public License
##  along with this program; if not, write to the Free Software
##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
##
##############################################################################


#-------------------------------------------------#
# install package list define
#  0x01:CARPS2/UFR2LT Driver
#  0x02:LIPSLX/UFR2 Driver
#  0x04:LIPS4 Driver
#-------------------------------------------------#
INSTALL_PACKAGE_RPM_32="
0x02:libjpeg-turbo
0x06:beecrypt
0x06:beecrypt-devel
0x07:gtk3
0x03:jbigkit-libs
0x04:zlib"

REPLACE_PACKAGE_RPM_32="
beecrypt,libgcrypt
beecrypt-devel,libgcrypt-devel"

INSTALL_PACKAGE_RPM_64="
0x02:libjpeg-turbo
0x06:beecrypt
0x06:beecrypt-devel
0x07:gtk3
0x03:jbigkit-libs
0x04:zlib"

REPLACE_PACKAGE_RPM_64="
beecrypt,libgcrypt
beecrypt-devel,libgcrypt-devel"

INSTALL_PACKAGE_DEB_32="
0x07:libgtk-3-0
0x02:libjpeg62
0x06:libbeecrypt7
0x06:libbeecrypt-dev
0x03:libjbig0
0x04:zlib1g"

REPLACE_PACKAGE_DEB_32="
libbeecrypt7,libgcrypt20
libbeecrypt-dev,libgcrypt20-dev"

INSTALL_PACKAGE_DEB_64="
0x07:libgtk-3-0
0x02:libjpeg62
0x06:libbeecrypt7
0x06:libbeecrypt-dev
0x03:libjbig0
0x04:zlib1g"

REPLACE_PACKAGE_DEB_64="
libbeecrypt7,libgcrypt20
libbeecrypt-dev,libgcrypt20-dev"

APT_GET_RUN_ONCE_FLAG=""

#-------------------------------------------------#
# install message
#-------------------------------------------------#
INST_COM_01_01="#----------------------------------------------------#"

INST_ERR_01_01="The current user is %s.
Change user to root, and then perform installation again."
INST_ERR_02_01="Could not install."
INST_MSG_01_01="This installer is recommended for the following distributions that are currently supported as of the release of this installer:
- Fedora/Ubuntu/CentOS/Debian/UOS/Kylin OS/NeoKylin OS

If this installer is run under distributions for which the support period has ended, the installation of additional system libraries may be necessary after driver installation is complete.

Note that an internet connection is required for installation.

Do you want to continue with installation? (y/n)"
INST_MSG_01_02="This installer is recommended for the following distributions that are currently supported as of the release of this installer:
- Fedora/Ubuntu/CentOS/Debian

If this installer is run under distributions for which the support period has ended, the installation of additional system libraries may be necessary after driver installation is complete.

Note that an internet connection is required for installation.

Do you want to continue with installation? (y/n)"
INST_MSG_02_01="Some system libraries could not be installed.
Refer to the Readme file for more information.
Do you want to continue with installation? (y/n)"
INST_MSG_03_01="Installation is complete.
Do you want to register the printer now? (y/n)"

LC_FILE_DIR="resources"
LC_FILE="no_localize"   
LANG_INFO=`echo $LANG | tr '[:upper:]' '[:lower:]'`
case "${LANG_INFO##*.}" in
    utf8 | utf-8)
        case "${LANG_INFO%%.*}" in
            ja_jp)
                LC_FILE="installer_ja_utf8.lc"
            ;;
            fr_fr)
                LC_FILE="installer_fr_utf8.lc"
            ;;
            it_it)
                LC_FILE="installer_it_utf8.lc"
            ;;
            de_de)
                LC_FILE="installer_de_utf8.lc"
            ;;
            es_es)
                LC_FILE="installer_es_utf8.lc"
            ;;
            zh_cn)
                LC_FILE="installer_zh_CN_utf8.lc"
            ;;
            ko_kr)
                LC_FILE="installer_ko_utf8.lc"
            ;;
            zh_tw)
                LC_FILE="installer_zh_TW_utf8.lc"
            ;;
            *)
                LC_FILE="installer_en_utf8.lc"
            ;;
        esac
    ;;
esac

#-------------------------------------------------#
# etc. define
#-------------------------------------------------#
DRIVER_FLAG=0
ERROR_CHECK=0
DRIVER_ERROR_CHECK=0
MACHINE_TYPE=""
PACKAGE_TYPE=""
RELEASE_DIR=""
DRIVER_PACKAGE=""
INSTALL_PACKAGE=""
INSTALL_CMD=""
INSTALL_OPT=""
INSTALL_PACKAGE_CMD=""

LIST_SPACE=" "

COLOR_K='\033[1;30m'
COLOR_R='\033[1;31m'
COLOR_G='\033[1;32m'
COLOR_Y='\033[1;33m'
COLOR_B=''
COLOR_M='\033[1;35m'
COLOR_C='\033[1;36m'
COLOR_OFF='\033[m'


#-------------------------------------------------#
# common function
#-------------------------------------------------#
C_output_log()
{
    echo -e -n $COLOR_B
    echo -e $INST_COM_01_01
    echo -e "# $1"
    echo -e $INST_COM_01_01
    echo -e -n $COLOR_OFF
}


C_output_message()
{
    echo -e -n $COLOR_B
    echo -e "$1"
    echo -e -n $COLOR_OFF
}


C_output_error_message()
{
    echo -e -n $COLOR_R
    echo -e "$1"
    echo -e -n $COLOR_OFF
}


C_check_distribution()
{   
    if [ $DRIVER_FLAG -eq 4 ]; then
        read -p "$INST_MSG_01_02" ans
    else
        read -p "$INST_MSG_01_01" ans
    fi
    if [ "$ans" != "y" -a "$ans" != "Y" ]; then
        exit 1
    fi
    echo
}


C_set_driver_flag()
{
    find . -name "*$MACHINE_TYPE.$PACKAGE_TYPE" | grep -i -e carps2 -e ufr2lt > /dev/null 2>&1
    if [ "${?}" -eq 0 ]; then
        DRIVER_FLAG=$(($DRIVER_FLAG | 0x01))
    fi

    find . -name "*$MACHINE_TYPE.$PACKAGE_TYPE" | grep -i -e lipslx  -e ufr2- > /dev/null 2>&1
    if [ "${?}" -eq 0 ]; then
        DRIVER_FLAG=$(($DRIVER_FLAG | 0x02))
    fi

    find . -name "*$MACHINE_TYPE.$PACKAGE_TYPE" | grep -i -e lips4 > /dev/null 2>&1
    if [ "${?}" -eq 0 ]; then
        DRIVER_FLAG=$(($DRIVER_FLAG | 0x04))
    fi
    
}


C_check_driver_and_install_package()
{
    local lc_package_flag=`echo $INSTALL_PACKAGE | cut -d ':' -f1`

    if [ $(($lc_package_flag & $DRIVER_FLAG)) = $DRIVER_FLAG ]; then
        INSTALL_PACKAGE=`echo $INSTALL_PACKAGE | cut -d ':' -f2-`
    else
        INSTALL_PACKAGE=""   
    fi
}
    

C_check_directory()
{
    echo "${0}" | grep '/' >/dev/null  2>&1
    if [ "${?}" -eq 0 ]; then
        shell_dir="${0%/*}"
        cd "${shell_dir}"
    fi
}


C_init_cups()
{
    C_output_log "cups $1"

    if [ -f /etc/init.d/cups ]
    then
        CMD="/etc/init.d/cups $1"
        echo $CMD
        $CMD
    elif [ -f /etc/init.d/cupsys ]
    then
        CMD="/etc/init.d/cupsys $1"
        echo $CMD
        $CMD
    else
        CMD="service cups $1"
        echo $CMD
        $CMD
    fi
    echo
}


C_update()
{
    case $PACKAGE_TYPE in
    'deb')
        if [ -z $APT_GET_RUN_ONCE_FLAG  ]; then
            C_output_log "apt-get update"
            apt-get update
            APT_GET_RUN_ONCE_FLAG="DONE"
        fi
        echo
        ;;
    'rpm')
        C_output_log "$INSTALL_PACKAGE_CMD upgrade"
        for upgrade_pkg in ${1}
        do
            INSTALL_PACKAGE=$upgrade_pkg

            if [ "$2" != "REPLACE" ]; then
                C_check_driver_and_install_package
                if [ "$INSTALL_PACKAGE" = "" ]; then
                    continue;
                fi
            fi
            echo "$INSTALL_PACKAGE"
            $INSTALL_PACKAGE_CMD -y upgrade $INSTALL_PACKAGE
            echo
        done
        ;;
    esac
    echo
}


C_install_package()
{
    C_output_log "$INSTALL_PACKAGE_CMD install"

    $INSTALL_PACKAGE_CMD -y install $INSTALL_PACKAGE

    echo
}


C_install_package_check()
{
    C_output_log "Install Package Check"

    replace_list=""
    err_check=0
    for inst_pkg in $INSTALL_PACKAGE
    do
        if [ -d "/etc/yum.repos.d" ];
        then
            echo $inst_pkg | grep '\.'  > /dev/null 2>&1
            if [ $? -eq 0 ]; then
                LIB_NAME=`echo $inst_pkg | cut -d '.' -f1`
                ARCH=`echo $inst_pkg | cut -d '.' -f2`
                rpm -qa | grep -i $LIB_NAME | grep -i $ARCH > /dev/null 2>&1
            else
                rpm -qa | grep -i $inst_pkg > /dev/null 2>&1
            fi
        else
            echo $inst_pkg | grep ":" > /dev/null 2>&1
            if [ $? -eq 0 ]; then
                LIB_NAME=`echo $inst_pkg | cut -d ':' -f1`
                ARCH=`echo $inst_pkg | cut -d ':' -f2`
                dpkg -l | grep -i $LIB_NAME | grep -i $ARCH > /dev/null 2>&1
            else
                dpkg -l | grep -i $inst_pkg > /dev/null 2>&1
            fi
        fi

        if [ $? -eq 0 ]; then
            C_output_message " OK: $inst_pkg"
        else
            #C_output_error_message   " NG: $inst_pkg"
            replace_pkg=""
            for check_pkg in $REPLACE_PACKAGE
            do
                IFS_BACK=$IFS
                IFS=','
                array=($check_pkg)
                IFS=$IFS_BACK
                if [ ${array[0]} = $inst_pkg ]; then
                    replace_pkg=${array[1]}
                fi
            done
            if [ "$replace_pkg" != "" ]; then
                replace_list=$replace_list$LIST_SPACE$replace_pkg
                C_output_error_message   " Replace: $inst_pkg -> $replace_pkg"
            else
                C_output_error_message   " NG: $inst_pkg"
                ERROR_CHECK=1
                err_check=1
            fi
        fi
    done

    echo

    if [ $err_check -eq 0 ]; then
        if [ "$replace_list" != "" ]; then
            INSTALL_PACKAGE=$replace_list
            C_update "${INSTALL_PACKAGE[@]}" "REPLACE"
            C_install_package
            C_install_package_check
        fi
    fi
}


C_install_printer_driver()
{
    C_output_log "Install Printer Driver ($INSTALL_CMD $INSTALL_OPT)"

    unset DRIVER_PACKAGE
    DRIVER_PACKAGE=`find . -name "*$MACHINE_TYPE.$PACKAGE_TYPE"`
    $INSTALL_CMD $INSTALL_OPT $DRIVER_PACKAGE
    if [ $? -ne 0 ]; then
        DRIVER_ERROR_CHECK=1
    fi

    unset DRIVER_PACKAGE
    DRIVER_PACKAGE=`find PPD -name "*.$PACKAGE_TYPE" | grep -i cnrcups`
    if [ "$DRIVER_PACKAGE" != "" ]; then

        $INSTALL_CMD $INSTALL_OPT $DRIVER_PACKAGE
        if [ $? -ne 0 ]; then
            DRIVER_ERROR_CHECK=1
        fi
    fi

    echo
}

#-------------------------------------------------#
# start install.sh
#-------------------------------------------------#
main()
{
    install_package_list=""
    
    #---------------------
    # check directory
    #---------------------
    C_check_directory

    #---------------------
    # localize
    #---------------------
    if [ -f ${LC_FILE_DIR}/${LC_FILE} ]; then
        source ${LC_FILE_DIR}/${LC_FILE}
    fi

    #---------------
    # check root
    #---------------
    if test `id -un` != "root"; then
        echo -e -n $COLOR_R
        printf "$INST_ERR_01_01" `id -un`
        echo -e -n $COLOR_OFF
        echo
        exit 1
    fi
    
    #------------------------
    # get distribution data
    #------------------------
    case `uname` in
    'SunOS')
        EXE_PATH='/opt/sfw/cups/sbin'
        ;;
    'HP-UX')
        EXE_PATH='/usr/sbin:/usr/bin'
        ;;
    'AIX')
        EXE_PATH='/usr/sbin:/usr/bin'
        ;;
    'Linux')
        EXE_PATH='/usr/sbin:/usr/bin'
        ;;
    esac
    
    export PATH=$EXE_PATH:$PATH
    
    if [ -d "/etc/yum.repos.d" ];
    then
        PACKAGE_TYPE="rpm"
        INSTALL_CMD="rpm"
        INSTALL_OPT="-Uvh --replacepkgs --replacefiles"
        if which yum > /dev/null 2>&1;
        then
            INSTALL_PACKAGE_CMD="yum"
        else
            INSTALL_PACKAGE_CMD="dnf"
        fi

        case `uname -m` in     
        'i386'|'i686')     
            MACHINE_TYPE="i386"     
            install_package_list=$INSTALL_PACKAGE_RPM_32
            REPLACE_PACKAGE=$REPLACE_PACKAGE_RPM_32
            ;;     
        'x86_64')     
            MACHINE_TYPE="x86_64"     
            install_package_list=$INSTALL_PACKAGE_RPM_64
            REPLACE_PACKAGE=$REPLACE_PACKAGE_RPM_64
            ;;
        'aarch64')
            MACHINE_TYPE="aarch64"
            install_package_list=$INSTALL_PACKAGE_RPM_64
            REPLACE_PACKAGE=$REPLACE_PACKAGE_RPM_64
            ;;
        'mips64')     
            MACHINE_TYPE="mips64el"
            install_package_list=$INSTALL_PACKAGE_RPM_64
            REPLACE_PACKAGE=$REPLACE_PACKAGE_RPM_64
            ;;     
        esac
    else
        PACKAGE_TYPE="deb"
        INSTALL_CMD="dpkg"
        INSTALL_OPT="-i -G --force-overwrite"
        INSTALL_PACKAGE_CMD="apt-get"
    
        case `uname -m` in     
        'i386'|'i686')     
            MACHINE_TYPE="i386"     
            install_package_list=$INSTALL_PACKAGE_DEB_32
            REPLACE_PACKAGE=$REPLACE_PACKAGE_DEB_32
            ;;     
        'x86_64')     
            MACHINE_TYPE="amd64"     
            install_package_list=$INSTALL_PACKAGE_DEB_64
            REPLACE_PACKAGE=$REPLACE_PACKAGE_DEB_64
            ;;
        'aarch64')
            MACHINE_TYPE="arm64"
            install_package_list=$INSTALL_PACKAGE_DEB_64
            REPLACE_PACKAGE=$REPLACE_PACKAGE_DEB_64
            ;;
        'mips64')
            MACHINE_TYPE="mips64el"
            install_package_list=$INSTALL_PACKAGE_DEB_64
            REPLACE_PACKAGE=$REPLACE_PACKAGE_DEB_64
            ;;
        esac
    fi
    
    

    #---------------------
    # set driver flag
    #---------------------
    C_set_driver_flag
    
    #---------------------
    # check distribution
    #---------------------
    C_check_distribution
    
    #------------------------
    # install start
    #------------------------
    C_output_log "Install Start"
    C_output_message "Machine Type = $MACHINE_TYPE"
    C_output_message "Package Type = $PACKAGE_TYPE"
    
    DRIVER_PACKAGE=`find . -name "*$MACHINE_TYPE.$PACKAGE_TYPE" | sort 2> /dev/null`
    C_output_message "Package list = "
    
    for list in $DRIVER_PACKAGE
    do
        C_output_message "    $list"
    done
    echo
    
    #---
    C_update "${install_package_list[@]}" "UPDATE"
    for package in $install_package_list
    do
        INSTALL_PACKAGE=$package

        C_check_driver_and_install_package
        if [ "$INSTALL_PACKAGE" = "" ]; then
            continue;
        fi

        C_install_package
        C_install_package_check
    done
    #---

    #---
    if [ $ERROR_CHECK -eq 1 ]; then
        read -p "$INST_MSG_02_01" ans
        if [ "$ans" != "y" -a "$ans" != "Y" ]; then
            exit 1
        fi
        echo
    fi
    #---

    C_install_printer_driver
    C_init_cups restart
}

main $*

if [ $ERROR_CHECK -eq 0 -a $DRIVER_ERROR_CHECK -eq 0 ]
then
    if [ $DRIVER_FLAG -eq 1 ]; then
        MODULE_NAME=cnsetuputil2l
    elif [ $DRIVER_FLAG -eq 2 ]; then
        MODULE_NAME=cnsetuputil2
    else
        MODULE_NAME=cnsetuputill
    fi

    if which $MODULE_NAME > /dev/null 2>&1;
    then
        read -p "$INST_MSG_03_01" ans
        if [ "$ans" != "y" -a "$ans" != "Y" ]; then
            exit 0
        fi
        $MODULE_NAME &
    fi
else
    C_output_error_message "$INST_ERR_02_01"
fi

exit 0

Thanks
 

cbreemer

Well-Known Coder
I'm not sure that if you do sh install.sh it will be executed by bash as is the intention.
Have tried just install.sh ?

I have to admit that the offending line 364
Bash:
array=($check_pkg)
looks strange to me, I've never seen such parentheses in shell scripts.
 

Top