Bash变量赋值问题排查:ip赋值给IPADDR运行报错处理
Bash脚本报错排查与修正方案
报错原因
- 第一条报错
Object "=" is unknown, try "ip help"触发原因:
你在if判断中写的$(ip = 192.168.1.1)存在两处语法错误:一是调用自定义的ip变量没有加$前缀,Bash将ip识别为系统内置的ip网络管理命令,而非你定义的变量;二是字符串等值判断不需要放在命令替换符$()中执行,正确的判断语法为[ "$变量名" = "比较值" ]。 - 第二条报错
./test: line 7: 192.168.1.1=: command not found触发原因:
Bash变量赋值要求变量名必须在等号左侧,且左侧变量名不需要加$符号,你写的"${ip}"="${IPADDR}"会把${ip}的解析值192.168.1.1当做系统命令执行,因此会报命令不存在的错误。
修正后代码
如果你要保留原逻辑:当ip变量值为192.168.1.1时自动获取本机非回环IP赋值给IPADDR,否则直接把ip变量值赋值给IPADDR,代码如下:
ip="192.168.1.1" if [ "$ip" = "192.168.1.1" ]; then IPADDR=$(ip addr show |grep 'inet '|grep -v 127.0.0.1 |awk '{print $2}'| cut -d/ -f1) else IPADDR="${ip}" fi echo "${IPADDR}"
如果你的实际需求是优先使用预先定义的ip值,仅当ip为空时才自动获取本机IP,可以使用更简洁的写法:
ip="192.168.1.1" if [ -n "$ip" ]; then IPADDR="${ip}" else IPADDR=$(ip addr show |grep 'inet '|grep -v 127.0.0.1 |awk '{print $2}'| cut -d/ -f1) fi echo "${IPADDR}"
内容的提问来源于stack exchange,提问作者John nielsen
相关产品推荐
相关产品推荐

