`

shell 脚本判断 和 "[: too many arguments"错误

阅读更多

查询某关键字进程是否存在

`ps -A|grep  -v grep|grep -v "test.sh"|grep 'keyword'|sed -n '1P' | awk '{print $11}'`




发现Shell脚本中的if语句产生了如题的错误,经检查,发现是因为脚本中的命令生成的结果含有多个单词,而该结果去和一个值比较时产生了如题的错误,不仔细看让人很困惑.下面是从IBM的developerworks 上找到的部分资料:
(http://www-128.ibm.com/developerworks/cn/linux/shell/bash/bash-2/index.html )

字符串比较说明
大多数时候,虽然可以不使用括起字符串和字符串变量的双引号,但这并不是好主意。为什么呢?因为如果环境变量中恰巧有一个空格或制表键,bash 将无法分辨,从而无法正常工作。这里有一个错误的比较示例:
if [ $myvar = "foo bar oni" ]
then
     echo "yes"
fi
在上例中,如果 myvar 等于 "foo",则代码将按预想工作,不进行打印。但是,如果 myvar 等于 "foo bar oni",则代码将因以下错误失败:
[: too many arguments
在这种情况下,"$myvar"(等于 "foo bar oni")中的空格迷惑了 bash。bash 扩展 "$myvar" 之后,代码如下:
[ foo bar oni = "foo bar oni" ]
因为环境变量没放在双引号中,所以 bash 认为方括号中的自变量过多。可以用双引号将字符串自变量括起来消除该问题。请记住,如果养成将所有字符串自变量用双引号括起的习惯,将除去很多类似的编程错误。"foo bar oni" 比较 应该 写成:
if [ "$myvar" = "foo bar oni" ]
then
     echo "yes"
fi

多引用细节

如果要扩展环境变量,则必须将它们用 双引号 、而不是单引号括起。单引号 禁用 变量(和历史)扩展。
以上代码将按预想工作,而不会有任何令人不快的意外出现。

实际上我的程序以前在Solaris上运行,放到Linux上后该命令会输出两行结果, 后一行才是我需要的结果.仿佛这样也不能在if语句中比较.解决方法是通过把第一行结果重定向到null中,这样就只有最后一行了.

 

分享到:
评论

相关推荐

    linux bash中too many arguments问题的解决方法

    当filename为空或者只有一行没有空格的字符串的时候,一切正常,反之,则会报:too many arguments,甚至是: binary operator expected之类的错误。 参考文章:...

    解决Unity不能调用shell脚本传递参数的问题

    ### 解决Unity不能调用shell脚本...3. **脚本内容**:确保shell脚本能够正确接收和使用参数。 通过这种方式,可以有效地解决Unity调用shell脚本并传递参数的问题,从而实现更加灵活的开发环境集成和自动化任务管理。

    解决python脚本中error: unrecognized arguments: True错误

    在Python编程中,`error: unrecognized arguments: True` 错误通常出现在命令行解析时,当你尝试传递一个未被脚本预期的参数时。这个错误表明你可能在调用Python脚本时,传入了一个程序无法识别的参数,例如在这个...

    too many arguments(解决方案).md

    too many arguments(解决方案).md

    监控Oracle数据库的常用shell脚本

    "监控Oracle数据库的常用shell脚本" 监控Oracle数据库的常用shell脚本是DBA日常工作中不可或缺的一部分。本文将分享8个常用的shell脚本,涵盖了数据库实例...这些shell脚本可以帮助DBA更好地监控和管理Oracle数据库。

    TypeError: _queue_reduction(): incompatible function arguments.

    使用pytorch的DDP分布式训练的时候遇到错误: TypeError: _queue_reduction(): incompatible function arguments. The following argument types are supported: 1. (process_group: torch.distributed....

    shell脚本语法

    echo "Number of arguments: $#" # 使用函数 greet "World" # 结束脚本 echo "Script finished." ``` 以上是对给定文件中提到的shell脚本语法及命令的一个详细解析。通过掌握这些基本概念和技术,您可以有效地...

    Linux命令笔记1

    Bash是最常用的一种,它是Bourne Again SHell的缩写,是Unix和Linux系统默认的shell。 【命令的使用】 在Linux中,命令通常由命令、选项和参数组成。命令提示符#表示当前用户为管理员,$表示普通用户。获取命令...

    Shell脚本学习指南笔记.pdf

    Shell脚本是Linux/Unix操作系统中的一种解释型编程语言,常用于自动化系统管理任务和集成其他程序以执行特定任务。它的主要特点包括简单性、可移植性和开发便捷性。简单性意味着Shell脚本易于理解和编写,即使对于...

    angular 1 3 0 rc3 angular 最新min 带doc

    这个压缩包文件"angular 1.3.0 rc3"包含了AngularJS的1.3.0 release candidate 3版本,这是一个重要的里程碑,因为它在正式版本发布之前进行广泛的测试和改进。 AngularJS的核心特性包括数据绑定、依赖注入、指令...

    前端教程:21 函数 arguments

    千锋Web前端教程_21_函数_arguments

    quick-doc:用于记录 shell 脚本的快速 Python 工具

    $ ./quick-doc.py -husage: quick-doc.py [-h] [-i [INPUT]] [-o [OUTPUT]] [-hl HEADER_LEVEL]generate markdown documentation from quick shell script commentsoptional arguments: -h, --help show

    linux-使用简单的shell脚本来调整MacOS以符合个人的喜好

    MacOS是基于Unix的操作系统,因此,它支持许多Linux下可用的命令行工具和Shell脚本。 首先,了解Shell脚本的基本结构至关重要。一个Shell脚本通常以`#!/bin/bash`作为第一行,这告诉系统使用Bash shell来执行接下来...

    当make执行遇到 Arguments too long

    gcc 4.1 package

    Shell kill tomcat process

    标题中的“Shell kill tomcat process”指的是在Linux或Unix操作系统中,使用Shell命令来结束Tomcat服务进程。Tomcat是一款广泛使用的开源Java Servlet容器,它用于部署和运行Java Web应用程序。在某些情况下,可能...

    ORA-00600: internal error code, arguments [4194]错误

    NULL 博文链接:https://gembler.iteye.com/blog/346242

    dwmstatus:C 中的 DWM 状态栏

    dwm状态 Conky 就像用 C 编写的 DWM 状态栏。 CPU 负载/彩色频率温度(CPU/GPU) 记忆网络配置文件名称电池体积钟/tmp 文件"/tmp/volume" 音量 % “/tmp/network-profile”(如果存在)包含网络配置文件名称

Global site tag (gtag.js) - Google Analytics