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. codeforces 691D Swaps in Permutation DFS

    这个题刚开始我以为是每个交换只能用一次,然后一共m次操作 结果这个题的意思是操作数目不限,每个交换也可以无限次 所以可以交换的两个位置连边,只要两个位置连通,就可以呼唤 然后连通块内排序就好了 #in ...

  2. 关于SecureCRT的安装和破解问题以及xp系统的串口问题

    今天下午找了几个小时的软件,因为交叉编译环境要搭好,其中SecureCRT还有串口问题要解决,我突然间发现我开始光盘中的SecureCRT坏掉了,在网站上下载SecureCRT,结果要很多的积分,这样 ...

  3. mysql的登录密码带特殊符号登录不进去的问题

    eg : mysqldump -u root -p)P:9 ${dbname} > $dataPath$filename 当我将数据库的数据每天进行自动导出时,需要带上密码,但 ) 是一个特殊符 ...

  4. 烽火HG220G 配置

    http://192.168.1.1/backupsettings.html http://192.168.1.1/updatesettings.html 修改连接数限制 <X_CT-COM_M ...

  5. JavaWeb应用中重定向与跳转的区别

    针对JSP与Servlet: 两种重要的跳转: 1.request.getRequestDispatcher("地址").forward(ServletRequest, Servl ...

  6. Define custom @Required-style annotation in Spring

    The @Required annotation is used to make sure a particular property has been set. If you are migrate ...

  7. codeforces 629BFar Relative’s Problem

    B. Far Relative’s Problem time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  8. ios游戏开发 Sprite Kit教程:初学者 1

    注:本文译自Sprite Kit Tutorial for Beginners 目录 Sprite Kit的优点和缺点 Sprite Kit vs Cocos2D-iPhone vs Cocos2D- ...

  9. POJ 3670 Eating Together (DP,LIS)

    题意:给定 n 个数,让你修改最少的数,使得它变成一个不下降或者不上升序列. 析:这个就是一个LIS,但是当时并没有看出来...只要求出最长LIS的长度,用总数减去就是答案. 代码如下: #inclu ...

  10. MT4平台上mql4实现的基于macd指标的智能交易EA

    屌丝命苦,拼爹拼不过,拼后台没有,技术宅一枚,情商有问题,不会见人说人话见鬼说鬼话,所以在国庆熬着混着,工作也没啥大起色,想想就郁闷,难不成一辈子就只能这样了? 苦思冥想,想得一条路,那就是程序化交易 ...