Q:

Issue while validating BASH Script

I have code lint errors while trying to validate my bash script:
#!/bin/bash

if [ $# -eq 0 ]; then
    printf 'No arguments supplied. Available arguments: dev, production\n'

    exit 128
fi

if [ "$1" -ne "dev" ] || [ "$1" -ne "production" ]; then
    printf 'Unsupported arguments supplied. Supported arguments: dev, production\n'

    exit 128
fi

if [ "$1" -eq "dev" ]; then
    printf 'Test Server Deploy Started!\n\n' &&
elif [ "$1" -eq "production" ]; then
    printf 'Production Server Deploy Started!\n\n' &&
fi

printf "=====> [1/7] - Pull Submodules <=====\n\n" &&
git pull --recurse-submodules &&

printf "\n\n=====> [2/7] - Update Submodules <=====\n\n" &&
git submodule update --init --recursive --force &&

printf "\n\n=====> [3/7] - Stop All Servers <=====\n\n" &&
pm2 stop all &&

printf "\n\n=====> [4/7] - Install Frontend Node Modules <=====\n\n" &&
cd ./frontend &&

if [ "$1" -eq "dev" ]; then
    npm ci &&
elif [ "$1" -eq "production" ]; then
    npm ci --only=production &&
fi

printf "\n\n=====> [5/7] - Build Frontend <=====\n\n" &&
npm run build &&

printf "\n\n=====> [6/7] - Install Backend Node Modules <=====\n\n" &&
cd ../backend &&

if [ "$1" -eq "dev" ]; then
    npm ci &&
elif [ "$1" -eq "production" ]; then
    npm ci --only=production &&
fi

printf "\n\n=====> [7/7] - Start All Servers <=====\n\n" &&
cd .. &&

if [ "$1" -eq "dev" ]; then
    pm2 restart ./build/ecosystem.config.js --env dev --update-env &&
elif [ "$1" -eq "production" ]; then
    pm2 restart ./build/ecosystem-prod.config.js --env production --update-env &&
fi

printf "\n\nDone.\n"
exit 0;

I used https://www.shellcheck.net/ to check, but it seems error with if statement.
I'm waiting for param "dev" or "deployment".
errors below:
Line 15:
if [ "$1" -eq "dev" ]; then
^-- SC1009: The mentioned syntax error was in this if expression.
                       ^-- SC1073: Couldn't parse this then clause. Fix to allow more checks.

Line 17:
elif [ "$1" -eq "production" ]; then
     ^-- SC1072: Unexpected keyword/token. Fix any mentioned problems and try again.

A:

An earlier line:
if [ "$1" -ne "dev" ] || [ "$1" -ne "production" ]; then

will always be true. That should probably be 
if [ "$1" != "dev" -a "$1" != "production" ]; then

@Andrea is also correct that the &&'s don't make sense
You would probably be better off using a case statement:
case "$1" in
  dev)
    echo "found dev"
    ;;
  production)
    echo "found production"
    ;;
  *)
    echo "not dev or prod, or not present"
    ;;
esac 

