shell脚本if判断语句报错[: too many arguments的两种原因
shell脚本,if判断语句报错[: too many arguments
我遇到过两种情况:
1、第一中情况就是网上大家说的,字符串变量中可能存在空格,shell解析时将其认为是多个参数,再进行判断时,无法知道该获取哪个值,例如:
脚本ee.sh:
strings1="hello world"
strings2="hello world"
if [ $strings1 = $strings2 ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
执行结果中报错:
ee.sh: line 3: [: too many arguments
strings1 is different from strings2
并自动执行了else分支中的语句。
而下面这段语句就不会这样:
脚本ee.sh:
strings1="hello world"
strings2="hello world"
if [ "$strings1" = "$strings2" ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
执行结果:strings1 is same as strings2
2、第二种是我自己初步接触shell脚本,很多语法规则不太熟悉时遇到的,我将其记为——多重判断:
还是以上面的例子,将第二段稍微改一下:
脚本ee.sh:
strings1="hello world"
strings2="hello world"
if [ "$strings1" = "$strings2" -eq 1 ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
执行结果:
ee.sh: line 3: [: too many arguments
strings1 is different from strings2
这里是按照常规的思路来写的,“ "$strings1" = "$strings2"先判断两个字符串是否相等,如果相等这个结果就是true,而true在一般语言中通常可以等价于1,因此又将这个结果跟1进行比较”,其实在这个逻辑中,我忽略了"$strings1" = "$strings2"本身就是个判断条件,执行结果就是true或false,而不需要再对这个结果判断它是否是1.
shell脚本if判断语句报错[: too many arguments的两种原因的更多相关文章
- shell 脚本之判断语句 if 详解
使用 Linux 系统这么长时间,对 shell 脚本也算是比较熟悉.其实不管是搞开发,还是搞运维,shell 脚本都是必备的基本技能.这次抽时间好好总结一下 shell 方面的知识,综合的再学习一下 ...
- Jenkins在shell脚本运行docker权限报错解决
报错环境 系统信息 Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS Release: 16.04 Codename: xenial doc ...
- 【亲测有效】Centos安装完成docker后启动docker报错docker: unrecognized service的两种解决方案
今天在学习Docker的时候 使用yum install docker安装完后启动不了,报错如下: [root@Sakura ~]# service docker start docker: unre ...
- Linux下安装Docker,报错docker: unrecognized service的两种解决方案
转自(方法1):https://www.cnblogs.com/ECJTUACM-873284962/p/9362840.html
- Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载
Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载 这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数 ...
- shell脚本中判断上一个命令是否执行成功
shell脚本中判断上一个命令是否执行成功 shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败.结合if-else语句实现判断上一个命令是否执行成功. 示例 ...
- shell脚本-循环选择语句
shell脚本-循环选择语句 过程式编程语言: 顺序执行 选择执行 循环执行 注:条件中的变量,可以在执行语句中使用,不用在加上"$". if语句 根据命令的退出状态来执行命令 单 ...
- [shell]上一个命令执行完成,才执行下一个操作 | shell脚本中判断上一个命令是否执行成功
shell脚本中判断上一个命令是否执行成功 shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败.结合if-else语句实现判断上一个命令是否执行成功. 场 ...
- shell执行${var:m:n}报错Bad substitution解决办法
Ubuntu系统下,执行字符串截取脚本时,总是报错:Bad substitution,脚本非常简单如下: #!/bin/sh str1="hello world!" :} 执行后报 ...
随机推荐
- [SQL]学习中遇到的错误
1.中英文模式切换 查找语句中不能出现中文字符!!!
- Win10资源管理器始终使用详细视图模式
Win10系统中使用资源管理器时,如果文件夹里有音乐文件就自动切换视图模式为音乐模式,这样有时确实很头疼,看不到文件的大小等信息. 解决的办法如下: 新创建FolderType = NotSpecif ...
- Xcode里如何修改类的名字
今天有朋友问我他的AFNetWorking和别的文件冲突啦,于是我帮他测试了下: 传送门: http://jingyan.baidu.com/article/fb48e8be35726f6e622e1 ...
- 添加额外yun源
.yum install jq 发没有jq安装包,无法安装 .下载并安装EPEL [root@node2 coredns]# wget http://dl.fedoraproject.org/pub/ ...
- 配置文件 "G:\虚拟机列表\Linux001.vmx" 由产品 VMware 创建, 其版本 VMware Workstation 不兼容并且不能使用.
解析: 报这种错误一般是虚拟机文件里声明的VMware版本和真实的VMware版本不一致导致.我们可以手动更改真实VMware版本,或者更改虚拟机文件里声明的VMware版本.以下我们通过更该虚拟机文 ...
- HCL试验七
在静态路由的基础上实行动态路由 对每台路由器的直连ip编写动态路由命令 路由器1 rip 1 network 192.168.1.0 network 10.1.1.0 undo summary und ...
- 统计学习方法 | 第3章 k邻近法 | 补充
namedtuple 不必再通过索引值进行访问,你可以把它看做一个字典通过名字进行访问,只不过其中的值是不能改变的. sorted()适用于任何可迭代容器,list.sort()仅支持list(本身就 ...
- grep与正则表达式:
1.grep程序 Linux下有文本处理三剑客 -- grep sed awk grep:文本 行过滤工具 sed: 文本 行编辑器(流编辑器) awk:报告生成器(做文本输出格式化) grep ...
- npm install 报 128 错误
[问题描述] 项目执行npm install的时候特别慢,到最后直接返回错误: verbose exit [ 1, true ] [解决方法] 执行以下两条命令: git config --globa ...
- 如何在Windows中手动生成SSH密钥?(转)
在Windows上,您可以通过多种方式创建SSH密钥.Windows需要SSH客户端,但在其操作系统上没有默认的SSH客户端.请注意,Windows目前正在测试本机OpenSSH应用程序,一般,不提倡 ...