Estou aprendendo scripts da Shell para obter um diploma em TI que estou fazendo atualmente. Estou tentando escrever um pequeno script que adiciona dois números, como mostra um dos tutoriais que recebemos.
echo "Enter two numbers"
read num1 num2
sum = 'expr $num1 + $num2'
echo "The sum is = $sum"
No entanto, quando eu concedo a permissão de execução e executo o script, isso me dá esse erro.
sum: =. No such file or directory.
sum: expr $num1 + $num2: No such file or directory
Eu tentei executar isso no Ubuntu e no Fedora, mas o mesmo erro ocorre. Alguém pode me dizer o que estou perdendo aqui?
shell-script
Isuru
fonte
fonte
Respostas:
Primeiro você precisa se livrar dos espaços para a tarefa, por exemplo
você precisa mudar
'
para um`
ou ainda melhor para$()
:Em vez de usar,
expr
você também pode fazer o cálculo diretamente no seu shell:fonte
expr
vez de$((...))
desejar ser portátil para o shell Bourne clássico, é uma boa ideia também evitar isso$(...)
.$()
? Tanto quanto eu sei que é exigido pelo posix, por exemplo, todos os shells compatíveis com o posix devem suportar #$()
$(…)
, mas acabou (talvez alguém em algum lugar ainda esteja executando o/bin/sh
Solaris).$(…)
–– ou pelo menos nem todas as versões.Você provavelmente leu os backticks como aspas simples na linha:
Veja o Wiki de Greg sobre como usar
$(...)
.Isso funciona conforme o esperado:
Observe também que não há lacunas em torno do sinal de igual (a atribuição de variável).
fonte
expr
é um programa externo usado pelo Bourne shell (ie sh). O shell Bourne não tinha originalmente nenhum mecanismo para executar aritmética simples. Ele usaexpr
programa externo com a ajuda de backtick.O backtick ( ` ) é chamado de substituição de comando. Substituição de comando é o mecanismo pelo qual o shell executa um determinado conjunto de comandos e, em seguida, substitui sua saída no lugar dos comandos.
No bash (bourne again shell) ele tem o seguinte systax, não usará programa extrnal
expr
.se queremos usar o programa externo
expr
. nós temos o seguinte systax:fonte
Se você estiver usando o bash, basta fazer algo assim:
fonte
fonte
fonte
Você pode usar um único bastão (a `tecla)
fonte
$( ... )
nas conchas. Além disso, o problema é que o OP usa espaços onde não deveria.fonte
fonte