variable una script resultado pasar parametros guardar funciones from entorno cómo con comando string bash null case

string - una - variables en bash



¿Cómo pruebo una cadena vacía en una declaración de caso Bash? (4)

Aquí hay una solución:

case _${command} in _start) do_start ;; _stop) do_stop ;; _config) do_config ;; _) do_default ;; *) do_help ;; esac

Obviamente puedes usar cualquier prefijo que quieras.

Tengo un script Bash que realiza acciones basadas en el valor de una variable. La sintaxis general de la declaración de caso es:

case ${command} in start) do_start ;; stop) do_stop ;; config) do_config ;; *) do_help ;; esac

Me gustaría ejecutar una rutina predeterminada si no se proporciona ningún comando, y do_help si el comando no se reconoce. Intenté omitir el valor del caso así:

case ${command} in ) do_default ;; ... *) do_help ;; esac

El resultado fue predecible, supongo:

syntax error near unexpected token `)''

Luego traté de usar mi mejor disparo en una expresión regular:

case ${command} in ^$) do_default ;; ... *) do_help ;; esac

Con esto, un $ {command} vacío cae en el * caso.

¿Estoy tratando de hacer lo imposible?


La declaración de case utiliza globs, no expresiones regulares e insiste en coincidencias exactas.

Entonces, la cadena vacía se escribe, como de costumbre, como "" o '''' :

case "$command" in "") do_empty ;; something) do_something ;; prefix*) do_prefix ;; *) do_other ;; esac


Uso una caída simple. ningún parámetro pasado ($ 1 = "") será capturado por la segunda declaración de caso, sin embargo, el siguiente * capturará cualquier parámetro desconocido. Voltear el "") y *) no funcionará como *) capturará todo cada vez en ese caso, incluso espacios en blanco.

#!/usr/local/bin/bash # testcase.sh case "$1" in abc) echo "this $1 word was seen." ;; "") echo "no $1 word at all was seen." ;; *) echo "any $1 word was seen." ;; esac


Así es como lo hago (para cada uno):

#!/bin/sh echo -en "Enter string: " read string > finder.txt echo "--" >> finder.txt for file in `find . -name ''*cgi''` do x=`grep -i -e "$string" $file` case $x in "" ) echo "Skipping $file"; ;; *) echo "$file: " >> finder.txt echo "$x" >> finder.txt echo "--" >> finder.txt ;; esac done more finder.txt

Si estoy buscando una subrutina que existe en uno o dos archivos en un sistema de archivos que contiene docenas de archivos cgi, ingreso el término de búsqueda, por ejemplo, ''ssn_format''. bash me devuelve los resultados en un archivo de texto (finder.txt) que se ve así:

- ./registry/master_person_index.cgi: SQLClinic :: Security :: ssn_format ($ user, $ script_name, $ local, $ Local, $ ssn) if $ ssn ne "";