shell 字符串比较与脚本 too many arguments 报错
一、问题
最近在写 shell 脚本的时候,遇到了一些小问题,就是我在判断一个字符串是否为空的时候经常报下面的错,程序是正常执行了,但是有这个提示很蛋疼,下面就是看看是什么问题导致的?
[: too many arguments
二、问题解析
原始脚本
我的脚本是这样写的
#!/bin/bash
list='1 2 4 ad'
if [ $list -eq '' ]
then
echo "empty"
else
echo "not empty"
fi
运行后
[root@wi-mi-2034 scripts]# bash test.sh
test.sh: line 3: [: too many arguments
not empty
第一个问题: -eq 是用于比较两个数字的,比较字符串要使用 ==。
更改版本一 使用 "==" 进行比较
使用 "==" 进行比较,替换 -eq.
#!/bin/bash
list='1 2 4 ad'
if [ $list == '' ]
then
echo "empty"
else
echo "not empty"
fi
运行之后
[root@wi-mi-2034 scripts]# bash test.sh
test.sh: line 3: [: too many arguments
not empty
还是有这个报错,但是经过我的测试发现,如果我们将 list 值设置为 没有空格的话,是不会出现这个问题。
更改版本二 使用 "==" 进行比较,更改变量的值
list 原来的值为:1 2 4 ad 更改为 ad
#!/bin/bash
list='ad'
if [ $list == '' ]
then
echo "empty"
else
echo "not empty"
fi
运行之后
[root@wi-mi-2034 scripts]# bash test.sh
not empty
运行正常。
问题原因
问题是有空格导致的。但是经过我们的测试,发现,形如 ad和 ad 和 ad ,这种单单前后有空格的,是不会报错的,但是像 ad ad,这种两个字符直接有空格的话,是会进行报错的。
三、问题解决
字符串判断
使用 == 进行判断字符串是否相等, 判断字符串是否为空的话用 -z或者 -n
== :判断字符串是否相等
-z :判断 string 是否是空串
-n :判断 string 是否是非空串
在进行字符串判断的时候使用 ""或者 ''.
- '' :单引号不适合在引用变量做比较的时候使用。因为它会让变量拿不到值。
- "" :适合在任何时候引用,引用变量以及不引用变量都可以使用。
示例:当我们的字符串必须包含空格的时候
#!/bin/bash
list='1 2 4 ad'
if [ $list == '' ]
then
echo "empty"
else
echo "not empty"
fi
我们可以在使用变量做比较的时候,在变量外使用双引号。
#!/bin/bash
list='1 2 4 ad'
if [ "$list" == '' ]
then
echo "empty"
else
echo "not empty"
fi
shell 字符串比较与脚本 too many arguments 报错的更多相关文章
- shell脚本if判断语句报错[: too many arguments的两种原因
shell脚本,if判断语句报错[: too many arguments 我遇到过两种情况: 1.第一中情况就是网上大家说的,字符串变量中可能存在空格,shell解析时将其认为是多个参数,再进行判断 ...
- Jenkins在shell脚本运行docker权限报错解决
报错环境 系统信息 Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS Release: 16.04 Codename: xenial doc ...
- LoadRunner录制回放脚本RecContentType=application/json报错
今天做一个新项目,项目系统的框架是用SSH,特意查看了一下项目源码,用的ajax提交比较多,主要的问题是该系统对IE(8~10)浏览器都不兼容,无法进行录制. 是问题,总有解决的办法! 我本机为Loa ...
- loadrunner脚本因为没有token报错
目录 场景 解决过程 解决方案 总结 场景 用loadrunner11录制脚本,处理后回放,加上检查点,报错找不到检查点对应的内容,去掉检查点,没有报错,但是打开页面没有该操作的痕迹.手动在页面上操作 ...
- MySQL执行外部sql脚本文件命令是报错:unknown command
使用source导入外部sql文件: mysql> source F:\php\bookorama.sql; -------------- source F: -------------- ER ...
- zabbix官方源替换为阿里云的zabbix源,一键脚本。(安装zabbix报错curl#18 - "transfer closed with 2988713 bytes remaining to read":15 ETA Trying other mirro)
最近突然安装zabbix总是报错,比如 (24/27): t1lib-5.1.2-14.el7.x86_64.rpm | 166 kB 00:00:00 zabbix-web-4.4.6-1.el7. ...
- Django 执行单独脚本及SyntaxError缩进报错解决
有时候会碰到这样的场景,对于一些业务升级,我需要把数据库数据做些处理,同时又想以 Django 项目的环境变量执行脚本,这个时候使用 python 脚本是再适合不过的手段了. 注意:在pycharm里 ...
- PHP“Cannot use object of type stdClass as array” (php在调用json_decode从字符串对象生成json对象时的报错)
php再调用json_decode从字符串对象生成json对象时,如果使用[]操作符取数据,会得到下面的错误 错误:Cannot use object of type stdClass as arra ...
- win处navicat直接导出的sql脚本导入Linux mysql报错问题
最近几天在把win上的项目的数据库转移到Ubuntu,于是第一件事就是从win处的navicat直接导出sql脚本,然后进入Ubuntu导入的时候会报错误,跳过错误继续执行导致数据库表的缺失. 跨平台 ...
随机推荐
- [Tricks] 为文件夹右键菜单增加 【使用VS Code 打开】
传统的IDE安装之后都会在文件夹的右键菜单中增加如[Open in Visual Studio]或者[Open Folder as IntelliJ IDEA Project]这样的选项 但VS Co ...
- PHP的bcmath编译安装
问题描述:zabbix编译安装时PHP条件检查失败,如下图: 解决办法: 1.PHP自带bcmath扩展模块,可直接进行编译安装. [root@localhost etc]# cd /usr/loca ...
- 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU硬件那些事(2.1)- 玩转板载OpenSDA,Freelink调试器
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列EVK上板载调试器的用法. 本文是i.MXRT硬件那些事系列第二篇,第一篇痞子衡给大家整体介绍了i.M ...
- (4)一起来看下mybatis框架的缓存原理吧
本文是作者原创,版权归作者所有.若要转载,请注明出处.本文只贴我觉得比较重要的源码,其他不重要非关键的就不贴了 我们知道.使用缓存可以更快的获取数据,避免频繁直接查询数据库,节省资源. MyBatis ...
- uniapp 用户拒绝授权再次调起授权-语音识别、微信地址、附近地址
小程序重构,采用 uniapp 框架.记录一下踩过的坑.关于用户拒绝再次调起授权,及如何识别语音识别.微信地址.附近地址的处理. 语音识别 组件 语音识别,小程序只有录音功能,若要识别录音文件,常规做 ...
- 从xxe-lab来深入学习xxe漏洞
这几天,想复习一下xxe的知识,于是把以前的一个靶场拿过来玩玩,顺便审计一下代码2333,靶场地址:https://github.com/c0ny1/xxe-lab 首先先练习的是php-xxe: 我 ...
- 如何让excel文件读取变得更简单
今天给大家安利一款excel文件导入神器,easyexcel,官方地址:(https://github.com/alibaba/easyexcel). 在官网文档中有介绍了其性能. 从上面的性能测试可 ...
- Windows 服务程序(二)
服务控制管理器 (SCM, Service Control Manager),它在系统启动时自动启动,其主要作用是维护和管理一张服务信息表. OpenSCManager() 介绍:功能:建立了一个到服 ...
- meterpreter读取hash明文记录
今天测试某个站点时读hash老出错 这里做下读hash的笔记 进去meterpreter后getuid一 1 2 meterpreter > getuid Server username: NT ...
- javascript语言学习
本课将和大家一起学习简单的js dom 操作,涵盖DOM API以及JQuery的方法. 相关简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语 ...