Después de 1 argumento, el inicio de cada argumento no es igual a -*

Después de 1 argumento, el inicio de cada argumento no es igual a -*

Después de 2 argumentos, el inicio de cada argumento no es igual a -*

for args in "$@"
do
if [[ ${@: 2} != -* ]]; then 
case "$args" in
   -q)
      if [ ! -z "$2" ]; then
          echo "$2"
          shift
       fi
    shift
    ;;
   -w)
      if [ ! -z "$2" ]; then
          echo "$2"
          shift
       fi
    shift
    ;;
   -e)
      if [ ! -z "$2" ]; then
          echo "$2"
          shift
       fi
    shift
    ;;
esac
else 
    echo "arguments start with '-'"
fi
done

-q s d f g hSólo funciona correctamente con el primer argumento.

-q -v -b -n -m -ny -q -l j u -y dmal

Después del primer argumento, el resto de argumentos no deben comenzar con el carácter '-'

if [ ! -z "$2" ];- comprueba si el argumento está vacío

Respuesta1

Parece querer verificar que ninguno de los argumentos, excepto el primero, comience con un guión.

Puedes hacer esto así:

#!/bin/bash

if [[ $1 != -* ]]; then
    printf '1st argument, "%s", does not start with a dash\n' "$1"
    exit 1
fi >&2

arg1=$1

shift

for arg do
    if [[ $arg == -* ]]; then
        printf 'Argument "%s" starts with a dash\n' "$arg"
        exit 1
    fi
done >&2

echo 'All arguments ok'

printf 'arg 1 = "%s"\n' "$arg1"
printf 'other arg = "%s"\n' "$@"

Si necesita que su primer argumento sea -qespecífico, cambie la primera prueba de

[[ $1 != -* ]]

a

[[ $1 != -q ]]

información relacionada