一、问题

最近在写 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. Jetpack系列:Paging组件帮你解决分页加载实现的痛苦

    相信很多小伙伴们在项目实战中,经常会用到界面的分页显示.加载更多等功能.需要针对具体功能做针对性开发和调试,耗时耗力. Paging组件的使用将这部分的工作简化,从而让开发者更专注于业务的具体实现.下 ...

  2. js赋值,字典,数据类型和参数传递的简单熟悉

    之所以这样分,原因是布尔类型和整数浮点数在内存里是直接赋值的,而数组实际上数组名指的是这个数组的地址 字符串同样是地址,字典也是. //熟悉赋值 var x=0; console.log(x); va ...

  3. gitblit在windows10上的安装及服务启动报错处理

    折腾一下午算是装好了,心情不错决定分享一下.安装步骤大同小异网上都有,主要是Failed creating java 这个报错,百度出来的没有一个能给我解决的,摸索半天找出一个自己的方式.为报错而来的 ...

  4. [PHP] php, apache, VS Code安装与配置

    1. 下载

  5. 栈二:包含min函数的栈

    /** * 题目:包含min函数的栈 * 描述:  定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.  *  注:用data来保存数据,用另一个栈min保存依次入栈最小的数 *  ...

  6. SpringBootSecurity学习(20)前后端分离版之OAuth2.0刷新token

    刷新token 前面的例子和配置都是从头开始申请授权码和令牌,现在来看一下如何根据获取令牌时,回参中的 refresh_token 来刷新令牌.现在在项目中配置的是内存模式的默认用户名密码,第一步先改 ...

  7. 基于STM32F1与NRF24L01模块的SPI简单通信

    一.前言 1.简介: 本文是基于STM32F1,将数据发送至NRF模块的寄存器,并将数据重新读取,通过串口发送出来的简单SPI单通信. 2.SPI简介: 调过STM8的都已经对SPI有所了解,调法都一 ...

  8. 渗透测试中Linux下反弹shell的认识

    最近老是觉得自己白天工作累,晚上理应休息 堕落了几天才发觉自己真垃圾,加紧向前吧. 0x00 前言 在平时渗透还是工作中经常会遇到shell反弹的情况,网上一搜反弹shell都是一大堆,但是真正遇到反 ...

  9. caffe中batch norm源码阅读

    1. batch norm 输入batch norm层的数据为[N, C, H, W], 该层计算得到均值为C个,方差为C个,输出数据为[N, C, H, W]. <1> 形象点说,均值的 ...

  10. SpringMvc启动源码解析

    1. 前言 上篇文章介绍了Spring容器的初始化https://www.cnblogs.com/xiaobingblog/p/11738747.html,接下来介绍SpringMvc容器的初始化 2 ...