manipulação de string BASH, erros de sintaxe

0
./script: line 1: #!/bin/bash: No such file or directory enter ip
>>> : 10.000

10.00 0 ./script: line 8: [0!=.]: command not found ./script: line 13: =: command not found

script

#!/bin/bash
var="0/24"
echo "enter ip"
read -p ">>> : " ipaddr
echo ${temp}        
echo ${ipaddr%?}                    #display whole string except last character
echo ${ipaddr:(-1)}                 #display last character in string
while [${ipaddr:(-1)}!="."]     #loop till ${ipaddr} last == "."
do
    ${cur} = ${ipaddr::-1}
    echo $cur
done                                    #remove last char if != "." 
$temp = ${ipaddr}${var}         #add string ${var} to end of ${ipaddr}
echo ${temp}
    
por Cybex 20.10.2015 / 23:36

2 respostas

2

Como não tenho representante suficiente para adicionar esses comentários às respostas existentes, vou escrever uma nova resposta.

  • A atribuição de valores a uma variável no BASH usa apenas o nome da variável, sem o $ -sign. Portanto, use foo="something" e NÃO $foo="something" .

  • [ é uma abreviação do programa / comando test . Comandos levam seus argumentos separados por espaços. Ao omitir o espaço após [ , você está dizendo à BASH para interpretar todo o conjunto de caracteres como uma palavra / string. Enquanto com o espaço, o rest of the line é passado como um argumento para o comando test . Quando invocado com [ , no entanto, test espera que um de seus argumentos seja ] e queixará se isso estiver faltando. Portanto, use if [ -f /etc/motd ] e NÃO if [-f /etc/motd]

por 21.10.2015 / 12:18
1

altere as linhas relevantes para

while [ ${ipaddr:(-1)} != "." ]     #loop till ${ipaddr} last == "."
do
    cur=${ipaddr::-1}
    echo $cur
done                                    #remove last char if != "." 
temp=${ipaddr}${var}         #add string ${var} to end of ${ipaddr}
  • no teste, você deve usar espaço (porque [${ipaddr:(-1)}!="."] é interpretado por bash como uma única palavra) Espaço após [ e antes de ] e um espaço em cada lado do operador != .
  • na atribuição de variáveis, não use ${var} no lado esquerdo, mas diretamente var=EXPR . (No lado direito, você usa um sinal de dólar $ para se referir ao valor da variável.)
por 21.10.2015 / 11:50