Linux shell中比较操作符“==”与“-eq”对比

在Linux shell编程中,经常会用到判断字符串是否相等,可用于判断字符串是否相等的操作符有‘-eq’(相等), ‘-ne’(不等于), ‘-lt’(小于), ‘-le’(小于或等于), ‘-gt’(大于)或‘-ge’(大于或等于),以及=,==,!=,<,>。

在bash指南中,字母操作符和符号操作符的两端的参数英语表达式不相同,符号操作符用的是string,字母操作符用的是arg。

# http://www.gnu.org/software/bash/manual/bashref.html

  • string1==string2
  • string1=string2
  • True if the strings are equal. ‘=’ should be used with the test command for POSIX conformance.
  • string1!=string2
  • True if the strings are not equal.
  • string1<string2
  • True ifstring1sorts beforestring2lexicographically.
  • string1>string2
  • True ifstring1sorts afterstring2lexicographically.
  • arg1OParg2
  • OP is one of ‘-eq’, ‘-ne’, ‘-lt’, ‘-le’, ‘-gt’, or ‘-ge’. These arithmetic binary operators return true ifarg1is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal toarg2, respectively.Arg1andarg2may be positive or negative integers.

在实际编程中发现,当用字母操作符,虽然效果与符号操作符相同,但会产生一个错误提示“[[: arg2: syntax error: operand expected (error token is "arg2")”。

如原文为

[[ "$1" -eq "" ]] && echo "delete all spaces and comments of specialized file, using with [email protected] filename" && exit 1

修改为

[[ "$1" == "" ]] && echo "delete all spaces and comments of specialized file, using with [email protected] filename" && exit 1

就不再提示了。

附带一个实用小脚本,用途:grep掉空格和注释符(#),简单实用。

#!/bin/bash   
# delete all spaces and comments of specialized file, using with [email protected] filename    
[[ "$1" == "" ] && echo "delete all spaces and comments of specialized file, using with [email protected] filename" && exit 1    
grep -v \# $1 | grep -v ^$

添加到操作系统中:

cat > delsc.sh << eof   
#!/bin/bash    
# delete all spaces and comments of specialized file, using with [email protected] filename    
[[ "\$1" -== "" ]] && echo "delete all spaces and comments of specialized file, using with \[email protected] filename" && exit 1    
grep -v \# \$1 | grep -v ^$    
eof    
chmod +x ./delsc.sh    
\mv delsc.sh /usr/local/bin/delsc    
which delsc    
cat /usr/local/bin/delsc

用法:

delsc filename

Linux shell中比较操作符“==”与“-eq”对比

时间: 2024-10-06 02:10:59

Linux shell中比较操作符“==”与“-eq”对比的相关文章

linux shell中的比较符号与特殊符号介绍

shell字符串比较.判断是否为数字  二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.  整数比较  -eq 等于,如:if [ "$a" -eq "$b" ]  -ne  不等于,如:if [ "$a" -ne "$b" ]  -gt 大于,如:if [ "$a" -gt "$b" ]  -ge 大于等于,如:if [  "$a" -ge "

[转帖]Linux shell中2&gt;&amp;1的含义解释 (全网最全,看完就懂)

Linux shell中2>&1的含义解释 (全网最全,看完就懂) https://blog.csdn.net/zhaominpro/article/details/82630528 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zhaominpro/article/details/82630528 A.首先了解下1和2在Linux中代表什么 在Linux系统中0 1 2是一个文件描述符 名称 代码 操作符 Java中表示 Linux 下文

理解 Linux shell 中的一个方言:2&gt;&amp;1

理解 Linux shell 中的一个方言:2>&1 2016-11-14 杜亦舒 前言 在使用 linux 命令或者 shell 编程时,这个用法常会遇到 2>&1 如果是刚开始接触Linux,这个东西的确不好理解,因为他没有直观的含义,不像一个命令,例如 cp是 copy 的简写,很好记. 我以前刚用Linux时就对这个东西迷糊了一段时间,今天刚好看到一篇文章介绍他,感觉很有必要总结出来,分享给还不是很理解这个方言的朋友. 下面看一个命令示例,然后分析下他是如何工作的: l

linux shell 中的位置变量

对于linux shell 中的位置变量,我一直以来都是吐不出来又咽不下去,每次看到都不懂,不懂了就去百度google,看完了又忘,真是慢性咽炎啊.现在认真想想也是,其实自己一直以来都没有好好学习过,只是看了些速成的东西,匆匆忙忙地扫描,然后以光的速度忘掉了.好了,不淡这些了,希望和大家共勉. 第一次在Makefile中看到位置参数这东西比如[email protected],$^,$<等 ,shell中的位置参数也长这样子,但含义是不一样的.在shell中 $#,表示传递到脚本的参数的个数 $

linux shell中的$0,$?,$!和&lt;&lt;&#39;END&#39;

变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表.如"$*"用「"」括起来的情况.以"$1 $2 - $n"的形式输出所有参数. [email protected] 所有参数列表.如"[email protected]"用「"」括起来的情况.以"$1

linux shell中&#39;&#39;,&quot;&quot;和``的区别

今天学习一个bash脚本,看到有一条:bin=`dirname "$0"` (dirname filename是输出该文件所在的目录,$0是该bash文件的文件名,在bash中一般使用cd `dirname $0`进入该脚本所在的目录中) 我尝试着cat $bin 输出是:. 然后我将反引号``去掉:bin=dirname "$0" 在运行cat $bin后报错. 网上查了一些bash的单引号'',双引号""和反引号``的区别. 单引号''和双引

Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)

case语句适用于需要进行多重分支的应用情况. case分支语句的格式如下: case $变量名 in 模式1) 命令序列1 ;; 模式2) 命令序列2        ;; *) 默认执行的命令序列     ;; esac Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)_linux shell_脚本之家 在Linux Shell中有很多的特殊符号,这对于我们写Shell脚本时要特别留意:一方面要知道这些特殊符号的用法,这些符号用好了可以达到事半功倍的效果:但另一方面要避免这些

Linux Shell中反引号``, 单引号&#39;&#39;, 双引号&quot;&quot;, $混用总结

用一个小程序(argv.py)来演示下: #!/usr/local/bin/python3 import sys print('sys.argv has these', len(sys.argv), 'elements:', sys.argv) 运行与结果: # 首先是赋予执行权限 chmod 755 argv.py #1 一个空格一个命令行参数 ./argv.py I love Shell scripting. sys.argv has these 5 elements: ['./argv.p

Linux Shell中‘$‘符号的N种用法

在Shell中$是一个特殊的字符,在不同场景中有不同的用法. 引用变量 使用$直接引用变量,包括循环变量. 123 [email protected]:~# x=1[email protected]:~# echo $x1 双引号"括起来的字符串支持变量插值. 123 [email protected]:~# x=1[email protected]:~# echo "x = $x"x = 1 使用${}作为单词边界. 123 [email protected]:/var/l