Você pode criar seu $PAYLOAD
peça por peça com base nas suas condições:
PAYLOAD="payload={"
PAYLOAD="$PAYLOAD\"channel\": \"${SLACK_CHANNEL}\","
PAYLOAD="$PAYLOAD\"username\": \"${USER}\","
case $MESSAGE_TYPE in
1)
PAYLOAD="$PAYLOAD \"text\": \"$MESSAGE1\","
;;
2)
PAYLOAD="$PAYLOAD \"text\": \"$MESSAGE2\","
;;
3)
PAYLOAD="$PAYLOAD \"text\": \"$MESSAGE3\","
;;
esac
PAYLOAD="$PAYLOAD \"icon_emoji\": \":slack:\""
PAYLOAD="$PAYLOAD}"
curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL
Como alternativa, você pode ter o Bash preguiçosamente avaliando $PAYLOAD
com eval
depois de definir $MESSAGE
corretamente.
PAYLOAD_PATTERN='payload={\"channel\": \"${SLACK_CHANNEL}\", \"username\": \"${USER}\", \"text\": \"$MESSAGE\", \"icon_emoji\": \":slack:\"}'
MESSAGE=...
eval "PAYLOAD=\"$PAYLOAD_PATTERN\""
curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL
Este é um padrão comum na programação de shell. Observe, no entanto, que se qualquer parte das variáveis expandidas como parte de $PAYLOAD_PATTERN
incluir entrada não confiável, usar eval
dessa maneira pode levar a problemas de segurança como um adversário que tem a capacidade de influenciar qualquer parte da entrada arbitrariamente. use isso para obter recursos de execução arbitrária de código no sistema que está executando o script.