http://blog.csdn.net/vah101/article/details/6173488

( a=2;b=4;c=9; ) 子shell 环境

{ a=2;b=4;c=9; } 当前shelll环境

((整型算术表达式 )) 返回0 /1

[[条件表达试]] 0/1

[] 0/1

$(命令)= `命令` 返回结果

[root@monitor ~]# b=`date`
[root@monitor ~]# echo $b
Mon May 23 23:59:44 CST 2016

[root@monitor ~]# a=$(date)
[root@monitor ~]# echo $a
Mon May 23 23:59:01 CST 2016

$(())

[root@monitor ~]# echo $((2,4,5))
5


[[ ]] [] :常量运算符恒为真   

[root@monitor ~]# [[   >  ||   ]]
[root@monitor ~]# echo $? [root@monitor ~]# [[ > || ]]
[root@monitor ~]# echo $? [root@monitor ~]# [[ > ]]
[root@monitor ~]# echo $?

root@monitor ~]# [ 1 -a 2 ]
[root@monitor ~]# echo $?
0
[root@monitor ~]# [ 1 -a 0 ]
[root@monitor ~]# echo $?
0
[root@monitor ~]# [ 1 -o 0 ]
[root@monitor ~]# echo $?
0


command1 & command2 & command3     三个命令同时执行
command1; command2; command3 不管前面命令执行成功没有,后面的命令继续执行
command1 && command2 只有前面命令执行成功,后面命令才继续执行
[root@monitor ~]# ((  && ))
[root@monitor ~]# echo $?
[root@monitor ~]#  type cat
cat is /bin/cat
[root@monitor ~]# type [
[ is a shell builtin
[root@monitor ~]# type [[
[[ is a shell keyword []:中的逻辑符号 -o -a
[[ ]] :中的逻辑符号 && ||
(( ))

[root@monitor ~]# (( && ))
[root@monitor ~]# echo $? [root@monitor ~]# (( && > ))
[root@monitor ~]# echo $? [root@monitor ~]# (( && ))
[root@monitor ~]# echo $?
(())结构计算并测试算数表达式的结果,退出码与[]相反

[true返回0,false返回1]

(())                       #返回1

(())                       #返回0

((>))                     #返回0

((>))                     #返回1

((-))                     #返回1

((/))                    #大于1,返回0

((/))                    #小于1,返回1

((/))                    #报错,返回1

[root@monitor ~]# ((0))
[root@monitor ~]# echo $?
1

[root@monitor ~]# [ 0 ]
[root@monitor ~]# echo $?
0

[root@monitor ~]# [[ 0 ]]
[root@monitor ~]# echo $?
0

文件测试操作:

返回true,如果:

-e                          文件存在

-a                          文件存在(已被弃用)

-f                          被测文件是一个regular文件(正常文件,非目录或设备)

-s                          文件长度不为0

-d                          被测对象是目录

-b                          被测对象是块设备

-c                          被测对象是字符设备

-p                          被测对象是管道

-h                          被测文件是符号连接

-L                          被测文件是符号连接

-S(大写)                     被测文件是一个socket

-t                          关联到一个终端设备的文件描述符。用来检测脚本的stdin[-t0]或[-t1]是一个终端

-r                          文件具有读权限,针对运行脚本的用户

-w                          文件具有写权限,针对运行脚本的用户

-x                          文件具有执行权限,针对运行脚本的用户

-u                          set-user-id(suid)标志到文件,即普通用户可以使用的root权限文件,通过chmod +s file实现

-k                          设置粘贴位

-O                          运行脚本的用户是文件的所有者

-G                          文件的group-id和运行脚本的用户相同

-N                          从文件最后被阅读到现在,是否被修改

f1 -nt f2                   文件f1是否比f2新

f1 -ot f2                   文件f1是否比f2旧

f1 -ef f2                   文件f1和f2是否硬连接到同一个文件

二元比较操作符,比较变量或比较数字

整数比较:

-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" ]

<                         小于,在ASCII字母中的顺序:

                          if [[ "$a" < "$b" ]]

                          if [ "$a" /< "$b" ]         #需要对<进行转义

>                         大于

-z                        字符串为null,即长度为0

-n                        字符串不为null,即长度不为0

注意:

使用-z或-n判断字符串变量时,必须要用""把变量引起来。

例如:

if [ -n $string1 ]  #string1未被初始化

then

    echo "String /"string1/" is not null."

else

    echo "String /"string1/" is null"

fi

#结果显示string1为非空,错误

if [ -n "$string1" ]    #string1仍然未被初始化

then

    echo "String /"string1/" is not null"

else

    echo "String /"string1/" is null"

fi

#结果显示string1为空,结果正确

if [ $string1 ]          #string1裸体判断

then

    echo "String /"string1/" is not null"

else

    echo "String /"string1/" is null"

fi

#结果正确

#但这种用法存在漏洞,比如:

string1="1 > 2"

if [ $string1 ]

then

    echo "String /"string1/" is not null"

else

    echo "String /"string1/" is null"

fi

#实际上[]中的内容被扩展为[ "1 > 2" ],所以结果会出错。
而使用[[ $string1 ]],则可以避免错误
需要转义

[root@monitor ~]# [ "a" \> "b" ]
[root@monitor ~]# echo $? [root@monitor ~]# [ "b" \> "a" ]
[root@monitor ~]# echo $? [root@monitor ~]# [ -a ]
[root@monitor ~]# echo $? [root@monitor ~]# [ -a ]
[root@monitor ~]# echo $? [root@monitor ~]# [ -o ]
[root@monitor ~]# echo $? [root@monitor ~]# [ -o ]
[root@monitor ~]# echo $? [root@monitor ~]# [[ "a" > "b" ]]
[root@monitor ~]# echo $? [root@monitor ~]# [[ "a" < "b" ]]

SHELL 详解的更多相关文章

  1. Linux的Bash Shell详解

    一.Bash Shell概述 1.什么是bash         bash是Bourne Again Shell的简称,是从unix系统中的sh发展而来的,是用户和Linux内核交互的工具,用户通过b ...

  2. hadoop shell 详解

    概述  所有的hadoop命令均由bin/hadoop脚本引发.不指定参数运行hadoop脚本会打印所有命令的描述.  用法: hadoop [--config confdir] [COMMAND] ...

  3. 每篇半小时1天入门MongoDB——3.MongoDB可视化及shell详解

    本篇主要介绍MongoDB可视化操作以及shell使用及命令,备份恢复.数据导入导出. MongoVUE安装和简单使用 使用mongo.exe 管理数据库虽然可行,功能也挺强大,但每次都要敲命令,即繁 ...

  4. Impala shell详解

    不多说,直接上干货! 查看帮助文档 impala-shell -h 刷新整个云数据 impala-shell -ruse impala;show tables; 去格式化,查询大数据量时可以提高性能 ...

  5. Linux之shell详解

    Shell是什么 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个界 ...

  6. Shell—详解$0、$1、$2、$#、$*、$@、$?、$$变量

    预定义变量:常用来获取命令行的输入 变量 作用 $0 当前Shell脚本本身的文件名称 $1 脚本接收的第一个参数($1-$9:第1-9个命令行参数名) $2 脚本接收的第二个参数($1-$9:第1- ...

  7. Shell [[]]详解:检测某个条件是否成立

    [[ ]]是 Shell 内置关键字,它和 test 命令类似,也用来检测某个条件是否成立. test 能做到的,[[ ]] 也能做到,而且 [[ ]] 做的更好:test 做不到的,[[ ]] 还能 ...

  8. Shell—详解$( )、$(( ))、``与${ }的区别

    https://www.jianshu.com/p/2237f029c385 https://www.cnblogs.com/chenpython123/p/11052276.html https:/ ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

随机推荐

  1. poj 3311 Hie with the Pie

    floyd,旅游问题每个点都要到,可重复,最后回来,dp http://poj.org/problem?id=3311 Hie with the Pie Time Limit: 2000MS   Me ...

  2. Windows下使用NCL(Cygwin模拟Linux环境)

    参考自:http://bbs.lasg.ac.cn/bbs/thread-37043-1-1.html 1.下载 所需文件均可在此下载:http://yunpan.cn/cQsvAEe3Axs2Z   ...

  3. openfl关于windows平台编译报错解决办法

    报错信息:  无法打开程序数据库“e:\newproj\mainclient\bin\windows\cpp\obj\obj\msvc-debug-ncxp\vc.pdb”:如果要将多个 CL.EXE ...

  4. webstorm下设置sass

    关于sass,就不想多说什么了.只要你有css基础,十分钟入门好吗.可以参考下资料:http://www.w3cplus.com/sassguide/ 今天想说的是webStorm下如何实现sass自 ...

  5. 【跟我一起学Python吧】Python解释执行原理

    这里的解释执行是相对于编译执行而言的.我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制的可执行文件.运行该程序的时候,就可 ...

  6. mysql_connect v/s mysql_pconnect

    原文:mysql_connect v/s mysql_pconnect 译文:mysql_connect v/s mysql_pconnect 译者:dwqs 当需要使用PHP连接MySQL数据库的时 ...

  7. 只有IE能上网,其他浏览器均不可以!

    今天起来,高高兴兴的来到实验室,发现电脑打开上不了网.本人平时喜欢用Chrome,发现上不了网,就开始ping.发现可以ping通,但是网页打不开! 第一反应是DNS的问题,可以发现DNS没问题,能正 ...

  8. Codeforces 377

    简单说一下. A 搜索出任意一个剩余细胞个数的联通块.剩下的填X. B 二分加贪心加数据结构. /* * Problem: * Author: Shun Yao */ #include <str ...

  9. Unity3D-数学相关

    1. Transform.rotation:对象在世界坐标系下的旋转:Transform.localRotation:对象在父对象的局部坐标系下的旋转.两个变量的类型均为四元素. (1)得到游戏对象当 ...

  10. SqlServer修改数据库文件及日志文件存放位置

    --查看当前的存放位置 select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master ...