O que há de errado com o seguinte script bash?

4

Eu escrevi a seguinte linha no meu script, mas não atribui nenhum valor à variável a

a= grep -n mark /etc/samba/smb.conf |cut -d: f1

Eu mostro o número da linha onde a string está presente em smb.conf na variável a. Mas o valor da variável é nulo. Qual pode ser o problema

    
por vnix27 09.03.2011 / 13:45

5 respostas

10

Duas coisas:

  1. Não pode haver espaços entre o nome da variável, o sinal = e o valor da variável
  2. Se você deseja colocar os resultados de um comando ou série de comandos em uma variável, coloque-a em $(command) ou em backticks de estilo antigo. Ambas as linhas abaixo estão corretas e fazem o mesmo:

    a='commands'
    a=$(commands)
    

Então sua linha deve ser

a=$(grep -n mark /etc/samba/smb.conf |cut -d: f1)

Existem algumas diferenças sobre como concatenar o uso de backticks ou novo estilo $() , verifique esta pergunta sobre SO para ver uma boa resposta.

    
por 09.03.2011 / 13:52
2
a='grep -n mark /etc/samba/smb.conf |cut -d: -f1'
    
por 09.03.2011 / 13:53
2

Tente isso

a=$(grep -n mark /etc/samba/smb.conf |cut -d: f1)

Ou, em vez do $ (), você pode usar backticks (que aqui ativam o código legal)

    
por 09.03.2011 / 13:53
1

Deve ser um = $( ... ) ou

a=' … '
    
por 09.03.2011 / 13:53
1

Talvez tentando usar o corte assim:

a='grep -n mark /etc/samba/smb.conf |cut -d: -f1'
    
por 09.03.2011 / 13:59