Argumentos condicionais

3

Como faço para passar argumentos ao iniciar o script bash para que linhas específicas sejam executadas dentro do script

Por exemplo ( createfile.sh ):

#!/bin/bash

export CLIENT1_DIR="<path1>"
export CLIENT2_DIR="<path2>"
chef-solo -c solo.rb -j client1.json
chef-solo -c solo.rb -j client2.json

Então

$ ./createfile.sh client1

só deve executar client1 linhas específicas, e substituí-lo por client2 deve executar apenas client2 linhas específicas.

    
por Innocentspirit 12.01.2017 / 17:04

2 respostas

3

Existem muitas soluções para isso. Aqui está um:

#!/bin/bash

client="$1"

case "$client" in
    "client1") export CLIENT1_DIR="<path1>" ;;
    "client2") export CLIENT2_DIR="<path2>" ;;
    *)  printf 'Invalid client argument: %s\n' "$client" >&2
        exit 1 ;;
esac

chef-solo -c solo.rb -j "$client".json

A variável client obtém o valor do primeiro argumento de linha de comando.

A instrução case define CLIENT1_DIR ou CLIENT2_DIR dependendo desse valor (ou sai com uma mensagem de erro se um valor inválido for usado).

Em seguida, chef-solo é invocado com o arquivo JSON correspondente ao que foi fornecido na linha de comando.

    
por 12.01.2017 / 17:41
3

Você tem as linhas em uma função:

#!/bin/bash
clientOne(){
    ## client1 specific lines
    echo "one"
}
clientTwo(){
    ## client2 specific lines
    echo "two"
}

case "$1" in
    "client1")
        clientOne
        ;;
    "client2")
        clientTwo
        ;;
    *)
        echo "Wrong option" >&2
        ;;
esac

## Common lines
echo foo
    
por 12.01.2017 / 17:26