Dê uma olhada neste exemplo de código:
MIN=10 if [ -n "$1" ]; then echo "$1"; fi if [ -n "$2" ]; then echo "$2"; fi if [ -n "$3" ]; then echo "$3"; fi if [ -n "$4" ]; then echo "$4"; fi if [ -n "$5" ]; then echo "$5"; fi if [ -n "$6" ]; then echo "$6"; fi if [ -n "$7" ]; then echo "$7"; fi if [ -n "$8" ]; then echo "$8"; fi if [ -n "$9" ]; then echo "$9"; fi if [ -n "${10}" ]; then echo "${10}"; fi echo "List of arguments: "$*"" echo "Name of this script: "$0"" if [ $# -lt "$MIN" ]; then echo "Not enough arguments, need $MIN to run."; fi
Para exemplo, a saída do terminal de $./new.sh q w e r t y u i o p
será:
q w e r t y u i o p List of arguments: q w e r t y u i o p Name of this script: ./new.sh
E a saída de $./new.sh q w e r t y u i o
será:
q w e r t y u i o List of arguments: q w e r t y u i o Name of this script: ./new.sh Not enough arguments, need 10 to run.
Pergunta : O que -n
significa?
Comentários
Resposta
[
é outro nome para o test
integrado, consulte aqui e aqui , também isso .
Essa sequência de if
declarações provavelmente seriam melhores como um loop. No Bash, poderíamos usar expansão indireta:
for ((i=1 ; i <= 10 ; i++)) ; do if [ -n "${!i}" ] ; then echo "${!i}" fi done
O idioma mais comum provavelmente seria usar shift
em cada iteração, mas destrói a lista de argumentos.
Além disso, citando: aqui $0
está fora das aspas. Na maioria dos casos, é mais útil manter todas as expansões de variáveis entre aspas, a menos que você queira divisão de palavras e expansão de nome de arquivo explicitamente.
echo "Name of this script: "$0""
Então, escreva:
echo "Name of this script: $0"
Comentários
- Você pode usar
shift
dentro de uma função e não afetar a lista de argumentos ' do chamador, embora usar uma função apenas para isso seja obviamente um pouco hackear.
help test
?[
e-n
são horríveis de pesquisar.bash -n myscript
faz, ele faz uma verificação de sintaxe no script em vez de executá-lo.