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