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.