./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

скрипт

#!/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}

2 ответа2

2

Поскольку у меня недостаточно представителей, чтобы добавить их в качестве комментариев к существующим ответам, я просто напишу новый ответ.

  • Присвоение значений переменной в BASH использует только имя переменной, без знака $ . Так что используйте foo="something" , а не $foo="something" .

  • [ является сокращением программы / команды test . Команды принимают аргументы, разделенные пробелами. Опуская пробел после [ , вы говорите BASH интерпретировать весь набор символов как одно слово / строку. В то время как с пробелом, rest of the line передается в качестве аргумента команды test . Когда вызывается с [ однако, test ожидает, что один из его аргументов будет ] , и будет жаловаться, если он отсутствует. Поэтому используйте if [ -f /etc/motd ] и NOT if [-f /etc/motd]

1

изменить соответствующие строки на

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}
  • в тесте вы должны использовать пробел (потому что [${ipaddr:(-1)}!="."] интерпретируется bash как одно слово) Пробел после [ и перед ] и пробел с каждой стороны от оператора !=
  • при назначении переменных не используйте ${var} слева, а непосредственно var=EXPR . (Справа вы используете знак доллара $ для обозначения значения переменной.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .