二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.
 
整数比较
 
-eq        等于,如:if [ "$a" -eq "$b" ]
-ne        不等于,如:if [ "$a" -ne "$b" ]
-gt        大于,如:if [ "$a" -gt "$b" ]
-ge        大于等于,如:if [ "$a" -ge "$b" ]
-lt        小于,如:if [ "$a" -lt "$b" ]
-le        小于等于,如:if [ "$a" -le "$b" ]
<        小于(需要双括号),如:(("$a" < "$b"))
<=        小于等于(需要双括号),如:(("$a" <= "$b"))
>        大于(需要双括号),如:(("$a" > "$b"))
>=        大于等于(需要双括号),如:(("$a" >= "$b"))
 
字符串比较
=        等于,如:if [ "$a" = "$b" ]
==        等于,如:if [ "$a" == "$b" ],与=等价
        注意:==的功能在[[]]和[]中的行为是不同的,如下:
        1 [[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么将为true
        2 [[ $a == "z*" ]]  # 如果$a等于z*(字符匹配),那么结果为true
        3 
        4 [ $a == z* ]      # File globbing 和word splitting将会发生
        5 [ "$a" == "z*" ]  # 如果$a等于z*(字符匹配),那么结果为true
        一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是.
        但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
!=        不等于,如:if [ "$a" != "$b" ]
        这个操作符将在[[]]结构中使用模式匹配.
<        小于,在ASCII字母顺序下.如:
        if [[ "$a" < "$b" ]]
        if [ "$a" \< "$b" ]
        注意:在[]结构中"<"需要被转义.
>        大于,在ASCII字母顺序下.如:
        if [[ "$a" > "$b" ]]
        if [ "$a" \> "$b" ]
        注意:在[]结构中">"需要被转义.
        具体参考Example 26-11来查看这个操作符应用的例子.
-z        字符串为"null".就是长度为0.
-n        字符串不为"null"
        注意:
        使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z
        或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可

以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.

在bash shell脚本中不直接支持浮点数的比较,比如 a=7.2 b=8 if [ $a -lt $b ] ; then echo a less than b else echo b less than a fi 会报错 integer expression expected 有两种解决办法 bc 方法 if [ `echo $a $b|bc` -eq 1 ] ; then awk 方法 if [ `ech

在bash shell脚本中不直接支持浮点数的比较,比如
a=7.2
b=8
if [ $a -lt $b ] ; then
echo  "a less than b "
else
echo "b less than a "
fi
会报错 integer expression expected

有两种解决办法
bc 方法
if [ `echo "$a < $b"|bc` -eq 1 ] ; then
awk 方法
if [ `echo "$a $b" | awk '{if($1<$2) {print 0} else {print 1}}'`  -eq 0 ] ; then

来个实际用的例子,我打算检查ubuntu是否安装了vim-full,版本是否超过7.0

result=`dpkg -l | grep "vim-full"`
if [ -n "$result" ]; then
ver_vim=`vim --version | grep "^VIM" | awk '{print $5}' `
echo "you have installed vim-full $ver_vim "
if [ `echo "$ver_vim > 7"|bc` -eq 1 ] ; then
echo "all is ok "
else
echo "vim's version is so low "
fi
else
echo "don't install vim-full, will auto install"
fi

shell判断文件,目录是否存在或者具有权限  
  #!/bin/sh  
  
myPath="/var/log/httpd/"  
myFile="/var /log/httpd/access.log"  
  
#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限  
if [ ! -x "$myPath"]; then  
mkdir "$myPath"  
fi  
 www.2cto.com  
#这里的-d 参数判断$myPath是否存在  
if [ ! -d "$myPath"]; then  
mkdir "$myPath"  
fi  
  
#这里的-f参数判断$myFile是否存在  
if [ ! -f "$myFile" ]; then  
touch "$myFile"  
fi  
  
#其他参数还有-n,-n是判断一个变量是否是否有值  
if [ ! -n "$myVar" ]; then  
echo "$myVar is empty"  
exit 0  
fi  
  
#两个变量判断是否相等  
if [ "$var1" = "$var2" ]; then  
echo '$var1 eq $var2'  
else  
echo '$var1 not eq $var2'  
fi  
 

Shell,Bash,等脚本学习(有区别)的更多相关文章

  1. Shell 脚本学习资料搜集

    Shell文档 ChinaUnix上大神“網中人”总结的Shell十三问,强烈推荐,这本书讲得比较精炼,而且都是一些Shell学习中容易把握不住的一些细节难点.每一问都写得非常精彩.ChinaUnix ...

  2. Shell脚本学习指南笔记

    Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...

  3. shell脚本学习之6小时搞定(1)

    shell脚本学习之6小时搞定(1) 简介 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把 ...

  4. 转 shell脚本学习指南

    shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...

  5. Shell脚本学习 - 运算符

    继续shell脚本学习.上一篇是基本数据类型和语法的总结,这一篇是运算相关的操作. 运算符 bash不支持简单的数学计算,需要依赖其他命令实现. expr可以代为实现. # 表达式一般这么写 ` + ...

  6. shell脚本学习-执行

    跟着RUNOOB网站的教程学习的笔记 Shell与Shell脚本 Shell是用户与Linux系统的桥梁.它既是一种命令语言,也是一种程序设计语言. Shell脚本是一种Shell编写的脚本程序,其实 ...

  7. Linux学习笔记:Shell脚本学习

    概念 真正能够控制计算机硬件(CPU.内存.显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁. 由于安全.复杂.繁琐等原因,用户不能直接接触内核(也没有 ...

  8. shell脚本学习总结02--数组

    bash同时支持普通数组个关联数组,普通数组只能使用整数作为数组的索引,关联数组可以使用字符串作为数组的索引. 数组的定义方法: 在单行中使用一列值定义一个数组 [root@new ~]# array ...

  9. shell脚本学习之6小时搞定(6)-重定向及其他

    shell学习之-重定向及其他 目录 shell学习之-重定向及其他 1.输出重定向 2.输入重定向 3.重定向深入讲解 4./dev/null 文件 5.awk Unix 命令默认从标准输入设备(s ...

随机推荐

  1. spring线程池ThreadPoolTaskExecutor与阻塞队列BlockingQueue

    一: ThreadPoolTaskExecutor是一个spring的线程池技术,查看代码可以看到这样一个字段: private ThreadPoolExecutor threadPoolExecut ...

  2. MySQL移动数据目录出现权限问题

    MySQL移动数据目录出现权限问题 环境: ubuntu 14.04.4 LTS 现象 今天把/var/lib/mysql下的数据文件移动到其他目录下,之后发现启动mysql报错,并且mysql无法运 ...

  3. MySql的内置函数

    MySQL的内置函数不但可以在SELECT查询语句中应用,同样也可以在INSERT.UPDATE和DELECT等语句中应用.例如,在INSERT添加语句中,应用日期时间函数获取系统的当前时间,并且将其 ...

  4. Vim常用插件——前端开发工具系列

    作为一名开发者,应该对编辑器之神Vim与神之编辑器Emacs有所耳闻吧.编辑器之战的具体细节有兴趣的童鞋可以google之. Vim最大的特点是打开速度快,功能强大,一旦掌握了其中的命令,编程过程双手 ...

  5. npm 配置

    设置代理 $ npm config set proxy http://server:port $ npm config set https-proxy https://server:port 如果代理 ...

  6. Android 屏蔽recent task 按钮

    Step 1 Add this permission to the manifest.xml file <uses-permission android:name="android.p ...

  7. [android] 练习viewpagerindicator的使用(一)

    主要是学习一下使用这个库 activity_main.xml <?xml version="1.0" encoding="utf-8"?> < ...

  8. three.js 在vscode的智能提示

    安装nodejs.启动或者重启vscode,打开控制台,输入命令 npm install --save @types/three 回车, 会多了个node_modules文件夹,再试试智能感知,出来. ...

  9. 怎么让textarea的光标靠左对齐

    1.怎么让textarea的光标靠左对齐: 把<textarea></textarea>之间空隙去掉就可以了. 2.怎么限制textarea的字数,利用maxlength属性限 ...

  10. 配置zookeeper集群

    创建3台服务,不同ip,相同端口 1.先安装jdk1.8 解压: tar -zxvf jdk-8u11-linux-x64.tar.gz 重新命名文件夹名字: mv jdk1..0_11/ jdk8 ...