一、问题

最近在写 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 adad ,这种单单前后有空格的,是不会报错的,但是像 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 报错的更多相关文章

  1. shell脚本if判断语句报错[: too many arguments的两种原因

    shell脚本,if判断语句报错[: too many arguments 我遇到过两种情况: 1.第一中情况就是网上大家说的,字符串变量中可能存在空格,shell解析时将其认为是多个参数,再进行判断 ...

  2. Jenkins在shell脚本运行docker权限报错解决

    报错环境 系统信息 Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS Release: 16.04 Codename: xenial doc ...

  3. LoadRunner录制回放脚本RecContentType=application/json报错

    今天做一个新项目,项目系统的框架是用SSH,特意查看了一下项目源码,用的ajax提交比较多,主要的问题是该系统对IE(8~10)浏览器都不兼容,无法进行录制. 是问题,总有解决的办法! 我本机为Loa ...

  4. loadrunner脚本因为没有token报错

    目录 场景 解决过程 解决方案 总结 场景 用loadrunner11录制脚本,处理后回放,加上检查点,报错找不到检查点对应的内容,去掉检查点,没有报错,但是打开页面没有该操作的痕迹.手动在页面上操作 ...

  5. MySQL执行外部sql脚本文件命令是报错:unknown command

    使用source导入外部sql文件: mysql> source F:\php\bookorama.sql; -------------- source F: -------------- ER ...

  6. 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. ...

  7. Django 执行单独脚本及SyntaxError缩进报错解决

    有时候会碰到这样的场景,对于一些业务升级,我需要把数据库数据做些处理,同时又想以 Django 项目的环境变量执行脚本,这个时候使用 python 脚本是再适合不过的手段了. 注意:在pycharm里 ...

  8. 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 ...

  9. win处navicat直接导出的sql脚本导入Linux mysql报错问题

    最近几天在把win上的项目的数据库转移到Ubuntu,于是第一件事就是从win处的navicat直接导出sql脚本,然后进入Ubuntu导入的时候会报错误,跳过错误继续执行导致数据库表的缺失. 跨平台 ...

随机推荐

  1. tiki-graph_formula.php代码执行漏洞复现(或许??)

    1.不知道从哪里翻出来的虚拟机镜像(不知道甚么时候出现在磁盘里面的) 打开配置一下是tikiwiki这个东西 2.遇到陌生的玩意总是忍不住好奇心的,打开nikto扫描一下,发现有些奇怪的东西 本来没抱 ...

  2. Java-Thread01之创建线程

    ------ ![](https://img2018.cnblogs.com/blog/1822322/201910/1822322-20191012203044528-233907422.jpg) ...

  3. Spring DestorySingleton流程

     第一节介绍Spring启动(链接)时,介绍AbstractApplicationContext的过销毁过程,主要是调用了内部的destroyBeans方法,这节便来介绍bean的销毁过程. 一.销毁 ...

  4. Flex 布局——语法属性详解

    前言 Flexbox 是 flexible box 的简称(注:意思是“灵活的盒子容器”),是 CSS3 引入的新的布局模式.它决定了元素如何在页面上排列,使它们能在不同的屏幕尺寸和设备下可预测地展现 ...

  5. 微信小程序模板消息

    1 先去微信公众平台,选择现有模板,会有一个模板编号,模板中没有的关键词,可以申请新增. 微信公众平台直达:https://mp.weixin.qq.com 模板消息对应文档直达:https://de ...

  6. Elasticsearch Java API 很全的整理

    Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种.相比来说transportClient API效率更高, ...

  7. css中em单位详解,说明

    em详解      em可以理解成“倍”. em会以父级元素中所设置的字体像素值为基准值进行成倍放大: 字体大小=(父级元素中的字体像素 * em的值) 例: 网页部分代码如下: 1.我现在没有在父级 ...

  8. Bran的内核开发教程(bkerndev)-02 准备工作

    准备工作   内核开发是编写代码以及调试各种系统组件的漫长过程.一开始这似乎是一个让人畏惧的任务,但是并不需要大量的工具集来编写自己的内核.这个内核开发教程主要涉及使用GRUB将内核加载到内存中.GR ...

  9. docker配置阿里云镜像

    今天docker pull镜像的时候太慢了  所以这里配置下阿里云镜像 打开阿里云控制台,没有的可以用淘宝账号或者支付宝账号直接登录 打开容器镜像服务,镜像加速器,复制加速器地址 修改配置文件 $: ...

  10. GSS3 - Can you answer these queries III

    题意翻译 nnn 个数, qqq 次操作 操作0 x y把 AxA_xAx​ 修改为 yyy 操作1 l r询问区间 [l,r][l, r][l,r] 的最大子段和 感谢 @Edgration 提供的 ...