Sua sintaxe tem muitos problemas:
-
remova espaços em torno de "=" ao definir uma variável
errado:
APP_ID = value
direita:
APP_ID=value
-
para executar um programa e colocar sua saída em uma variável, você precisa de
$(...)
(preferido no bash, não disponível no sh) ou backticks'command'
(suportado no bash e sh). (e lembre-se que ao atribuir uma variável, aspas não são necessárias, mas em outros casos elas são importantes:command "$(command)"
)errado:
APP_ID=command
direita:
APP_ID=$(command)
-
adicione espaços ao redor de tudo quando usar "[", e você precisa de um ponto-e-vírgula ou nova linha após o "]". Isso ocorre porque "[" é um comando embutido bash, e o não interno também é conhecido como "teste" (consulte
man test
), que, assim como outros comandos, leva seus argumentos separados por espaço:errado:
if[x!= y] then echo hello world fi
direita:
if [ x != y ]; then echo hello world; fi
-
use aspas duplas, e não aspas simples quando quiser expandir uma variável
errado:
if [ '' != '${APP_ID}' ]; then
direita:
if [ '' != "${APP_ID}" ]; then
-
Também para o exemplo acima, você pode usar -n (não vazio) em vez de comparar com uma string vazia
if [ -n "${APP_ID}" ]; then
-
E para o exemplo do ps, você não precisa do grep e do awk:
APP_ID=$(ps -C whoami --no-header --format 'pid')
E aqui está o script corrigido:
APP_ID=$(ps -C whoami --no-header --format 'pid')
if [ -n "${APP_ID}" ]; then
echo "Stopping instance $APP_ID"
fi