BASH 字符串操作,语法错误

BASH 字符串操作,语法错误
./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}

答案1

由于我没有足够的代表来将这些作为评论添加到现有答案中,因此我只会写一个新答案。

  • 在 BASH 中,给变量赋值时只使用变量名,不带$- 符号。因此请使用foo="something", 而不是 NOT $foo="something"

  • [是程序/命令 的缩写test。命令的参数以空格分隔。通过省略 后的空格[,您告诉 BASH 将整个字符集解释为一个单词/字符串。使用空格时, 将rest of the line作为参数传递给命令。但是,test当使用 调用时,期望其参数之一是,如果缺少 ,则会发出警告。因此请使用而不是[test]if [ -f /etc/motd ]if [-f /etc/motd]

答案2

将相关行更改为

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。(在右侧使用美元符号$来引用变量的值。)

相关内容