SHELL 详解

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

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

[[email protected] ~]# b=`date`
[[email protected] ~]# echo $b
Mon May 23 23:59:44 CST 2016

[[email protected] ~]# a=$(date)
[[email protected] ~]# echo $a
Mon May 23 23:59:01 CST 2016

$(())

[[email protected] ~]# echo $((2,4,5))
5


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

[[email protected] ~]# [[  2 > 3 || 1  ]]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [[  2 > 3 || 0  ]]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [[  2 > 3  ]]
[[email protected] ~]# echo $?

[email protected] ~]# [ 1 -a 2 ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ 1 -a 0 ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ 1 -o 0 ]
[[email protected] ~]# echo $?
0


command1 & command2 & command3     三个命令同时执行
command1; command2; command3       不管前面命令执行成功没有,后面的命令继续执行
command1 && command2               只有前面命令执行成功,后面命令才继续执行
[[email protected] ~]# (( 0 && 1))
[[email protected] ~]# echo $?
1
[[email protected] ~]#  type cat
cat is /bin/cat
[[email protected] ~]# type [
[ is a shell builtin
[[email protected] ~]# type [[
[[ is a shell keyword

[]:中的逻辑符号  -o  -a[[ ]] :中的逻辑符号 && ||
(( ))

[[email protected] ~]# ((100 && 200))
[[email protected] ~]# echo $?
0
[[email protected] ~]# ((100 && 3>4 ))
[[email protected] ~]# echo $?
1
[[email protected] ~]# (( 0 && 1))
[[email protected] ~]# echo $?
1
(())结构计算并测试算数表达式的结果,退出码与[]相反

[true返回0,false返回1]

((0))                       #返回1

((1))                       #返回0

((5>4))                     #返回0

((5>9))                     #返回1

((5-5))                     #返回1

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

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

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

[[email protected] ~]# ((0))
[[email protected] ~]# echo $?
1

[[email protected] ~]# [ 0 ]
[[email protected] ~]# echo $?
0

[[email protected] ~]# [[ 0 ]]
[[email protected] ~]# 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 ]],则可以避免错误
需要转义

[[email protected] ~]# [ "a" \> "b" ]
[[email protected] ~]# echo $?
1
[[email protected] ~]# [ "b" \> "a" ]
[[email protected] ~]# echo $?
0

[[email protected] ~]# [ 1 -a 0 ]
[[email protected] ~]# echo $?
127

[[email protected] ~]# [ 1 -a 1 ]
[[email protected] ~]# echo $?
0

[[email protected] ~]# [ 1 -o 1 ]
[[email protected] ~]# echo $?
0

[[email protected] ~]# [ 1 -o 0 ]
[[email protected] ~]# echo $?
0

[[email protected] ~]#  [[ "a" > "b" ]]
[[email protected] ~]# echo $?
1
[[email protected] ~]#  [[ "a" < "b" ]] 
时间: 2024-10-26 22:03:52

SHELL 详解的相关文章

shell详解

============================================================================1.shell详解:shell是基于c语言的基础上编写的程序,是用户与Linux内核之间沟通的桥梁:shell既是一种命令语言,又是一种程序语言.shell是只一种应用程序,这个应用程序提供一个界面,用户通过这个界面访问操作系统内核的服务. 2.shell脚本:是一种为shell编写的脚本程序:shell脚本就是将各种命令通过逻辑语句组合而成的程

Linux的Bash Shell详解

一.Bash Shell概述 1.什么是bash         bash是Bourne Again Shell的简称,是从unix系统中的sh发展而来的,是用户和Linux内核交互的工具,用户通过bash操作内核完成系统的使用和管理. 2.shell的种类         /bin/sh(已经被/bin/bash替代)         /bin/bash(默认的shell)         /bin/ksh(源自贝尔实验室,兼容bash)         /bin/tcsh(整合C shell

linux shell详解

shell工作原理 Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序.它不属于内核部分,而是在核心之外,以用户态方式运行.其基本功能是解释并执行用户打入的各种命令,实现用户与Linux核心的接口.系统初启后,核心为每个终端用户建立一个进程去执行Shell解释程序.它的执行过程基本上按如下步骤:  (1)读取用户由键盘输入的命令行.  (2)分析命令,以命令名作为文件名,并将其它参数改造为系统调用execve( )内部处理所要求的形式.  (3)终端进程调用fork( )建立

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

本篇主要介绍MongoDB可视化操作以及shell使用及命令,备份恢复.数据导入导出. MongoVUE安装和简单使用 使用mongo.exe 管理数据库虽然可行,功能也挺强大,但每次都要敲命令,即繁琐枯燥而且效率低下.MongoDb在Windows下的可视化操作的管理工具非常多,笔者从中找了几款使用了一翻,最后挑了一款MongoVUE来最简单介绍,因为笔者觉得MongoVUE界面看上去舒服些. 下载地址:http://www.mongovue.com/downloads/ 注意:官方提供的是收

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

[[ ]]是 Shell 内置关键字,它和 test 命令类似,也用来检测某个条件是否成立. test 能做到的,[[ ]] 也能做到,而且 [[ ]] 做的更好:test 做不到的,[[ ]] 还能做到.可以认为 [[ ]] 是 test 的升级版,对细节进行了优化,并且扩展了一些功能. [[ ]] 的用法为: [[ expression ]] 当 [[ ]] 判断 expression 成立时,退出状态为 0,否则为非 0 值.注意[[ ]]和expression之间的空格,这两个空格是必须

hbase shell基础和常用命令详解

HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务. 1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase

linux shell 字符串操作(长度,查找,替换,匹配)详解

linux shell 字符串操作(长度,查找,替换,匹配)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快. 一.判断读取字符串值 表达式 含义 ${var} 变量var的值, 与$var相同     ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${va

adb shell 命令详解,android

http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android 博客分类: android 常用:1.进入模拟器的shell模式 :  adb shell 2.安装应用程序:  adb install -r 应用程序.apkadb installadb install <apk文件路径> :这个命令将指定的apk文件安装到设备上adb install  -r

hbase shell基础和常用命令详解(转)

HBase shell的基本用法 hbase提供了一个shell的终端给用户交互.使用命令hbase shell进入命令界面.通过执行 help可以看到命令的帮助信息. 以网上的一个学生成绩表的例子来演示hbase的用法. name grad course math art Tom 5 97 87 Jim 4 89 80 这里grad对于表来说是一个只有它自己的列族,course对于表来说是一个有两个列的列族,这个列族由两个列组成math和art,当然我们可以根据我们的需要在course中建立更