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

判断一个文件的内容是不是为空,使用语句:

if test -z `cat filename`

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

参考文章:http://www.ibm.com/developerworks/cn/linux/shell/bash/bash-2/index.html

原因分析:
filename中的空格回车等迷惑了bash。
如果环境变量没放在双引号中,那么bash 认为条件中的自变量过多。

可以用双引号将字符串自变量括起来消除该问题。

看来是要养成将所有字符串自变量用双引号括起的习惯,将除去很多类似的编程错误。

解决方法:

给命令执行部分加上双引号即可:

代码如下:

if test -z "`cat filename`"

shell之too many arguments的解决方法二:

今天偶尔因解决一个小问题,遇到了一奇怪的问题“[ ]”和"[[  ]] "的不一样的效果,总结如下

显示一下code:     if [ -z ` lsof -i:22 ` ]    //这种写法会报too many arguments,改成[[ -z ` lsof -i:22 ` ]]
                            then
                                 echo "the port is not running"
                             else
                                 echo "the port is running"
                             fi

运行这个简单shell脚本时,总是报too many arguments,最后才查到和版本的通用性是有关系的,更简单的说是,"[[  ]]"比"[ ]"具有更好的通用性,所以,为了避免这种问题的发生,直接将"[  ]"替换成"[[  ]]"就可以了。而且”[[ ]]“比“[ ]”比它有更强的容错性,也就是在"[ ]"可能报的错在"[[ ]]结构中可能不报错,比如&&,||等这样的逻辑判断,因不是本篇重点,一带而过了。

(0)

相关推荐

  • linux bash字符串处理大全

    取得字符串的长度 复制代码 代码如下: 代码:%x="abcd"#方法一%expr length $x4# 方法二%echo ${#x}4# 方法三%expr "$x" : ".*"4# expr 的帮助# STRING : REGEXP   anchored pattern match of REGEXP in STRING 查找子串 复制代码 代码如下: 代码:%expr index  $x "b"2%expr index

  • Linux系统中bash shell编程的10个基础问题讲解

    第1问:为何叫做shell? 在介绍 shell 是什么东西之前,不妨让我们重新审视使用者与电脑的关系.我们知道电脑的运作不能离开硬件,但使用者却无法直接对硬件作驱动,硬件的驱动只能透过一个称为"操作系统(Operating System)"的软件来控管,事实上,我们每天所谈的linux,严格来说只是一个操作系统,我们称之为"核心(kernel)".然而,从使用者的角度来说,使用者也没办法直接操作kernel,而是透过kernel的"外壳"程序,

  • 使用Python脚本在Linux下实现部分Bash Shell的教程

    对于Linux用户来说,命令行的名声相当的高.不像其他操作系统,命令行是一个可怕的命题,但是对于Linux社区中那些经验丰富的大牛,命令行却是最值得推荐鼓励使用的.通常,命令行对比图形用户界面,更能提供更优雅和更高效的解决方案. 命令行伴随着Linux社区的成长,UNIX shells,例如 bash和zsh,已经成长为一个强大的工具,也是UNIX shell的重要组成部分.使用bash和其他类似的shells,可以得到一些很有用的功能,例如,管道,文件名通配符和从文件中读取命令,也就是脚本.

  • linux bash shell中case语句的实例

    bash case语句的例子. 分享一段bash shell代码,对于学习bash的同学理解case语句的用法,会有帮助. 例子: 复制代码 代码如下: #!/bin/bash### Program:# File operation# 1.) Open file 2.) Display file 3.) Edit file 4.) Delete file# site: WWW.JB51.NETPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/u

  • Linux BASH多进程并行处理的方法实现

    复制代码 代码如下: #!/bin/bash SEND_THREAD_NUM=13 tmp_fifofile="/tmp/$$.fifo" # 脚本运行的当前进程ID号作为文件名 mkfifo "$tmp_fifofile" # 新建一个随机fifo管道文件 exec 6<>"$tmp_fifofile" # 定义文件描述符6指向这个fifo管道文件 rm $tmp_fifofile for ((i=0;i<$SEND_THRE

  • linux bash脚本监控启动停止weblogic服务的脚本写法

    有时,linux系统需要做HA或者类似的功能,需要配置weblogic脚本来启动,停止,查看状态,可以如下方式写 命令形式:Weblogic server start|stop|restart|status ### BEGIN WLS Configration DOMAIN_NAME=base_domain SERVER_NAME=AServer ADMIN_URL="t3://ip:7001" DOMAIN_PATH=/Oracle/Middleware/user_projects/

  • linux BASH shell下设置字体及背景颜色

    BASH shell下设置字体及背景颜色 echo -e "\e[31mtest\e[41m" \e[30m 将字符的显示颜色改为黑色 \e[31m 将字符的显示颜色改为红色 \e[32m 将字符的显示颜色改为绿色 \e[33m 将字符的显示颜色改为淡红色 \e[34m 将字符的显示颜色改为蓝色 \e[35m 将字符的显示颜色改为紫色 \e[36m 将字符的显示颜色改为淡蓝色 \e[37m 将字符的显示颜色改为灰色 \e[40m -- \e[47m 设置背景色 \e[40m 将背景色设

  • Linux bash Shell中的变量类型详解

    在Linux系统中进行日常运维或者是编写脚本时,变量是再熟悉不过的了,但这些变量都有哪些类型,具体的用法又有哪些差异呢?本文整理分享给大家: 一.bash变量类型: 本地变量 局部变量 环境变量 位置变量 特殊变量(内置) 二.本地变量: varname=value:作用域为整个bash进程可以使用: 变量命名规范: 1. 只能含字母.数字和下划线,并且以字母和下划线开头 2. 最好不要跟系统已有的环境变量重名 3. 见名知意 三.局部变量: local varname=value:作用域为当前

  • 解决ssh远程登陆linux显示-bash-4.1$的问题

    cp -pr /etc/skel/.bash* /home/test/ #/home/test是用户目录 改变用户家目录:usermod -md /tmptest test 以上就是小编为大家带来的解决ssh远程登陆linux显示-bash-4.1$的问题全部内容了,希望大家多多支持我们~

  • Linux bash删除文件中含“指定内容”的行功能示例

    本文实例讲述了Linux bash删除文件中含"指定内容"的行功能.分享给大家供大家参考,具体如下: #!/bin/sh # 功能: 删除文件中含"指定内容"的行 # 运行方式: ./dline.sh c.log ==> 产生输出文件: c.log0 array=( "rm -f lvr_3531_pf_new" "arm-hisiv100-linux-gcc " "In function " &qu

随机推荐