zoukankan      html  css  js  c++  java
  • 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

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

    [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 ~]# [[ 2 > 3 || 1 ]] [root@monitor ~]# echo $? 0 [root@monitor ~]# [[ 2 > 3 || 0 ]] [root@monitor ~]# echo $? 0 [root@monitor ~]# [[ 2 > 3 ]] [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 ~]# (( 0 && 1))
    [root@monitor ~]# echo $?    
    1
    [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 ~]# ((100 && 200)) [root@monitor ~]# echo $? 0 [root@monitor ~]# ((100 && 3>4 )) [root@monitor ~]# echo $? 1 [root@monitor ~]# (( 0 && 1)) [root@monitor ~]# 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

    [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 $? 1 [root@monitor ~]# [ "b" > "a" ] [root@monitor ~]# echo $? 0 [root@monitor ~]# [ 1 -a 0 ] [root@monitor ~]# echo $? 127 [root@monitor ~]# [ 1 -a 1 ] [root@monitor ~]# echo $? 0 [root@monitor ~]# [ 1 -o 1 ] [root@monitor ~]# echo $? 0 [root@monitor ~]# [ 1 -o 0 ] [root@monitor ~]# echo $? 0 [root@monitor ~]# [[ "a" > "b" ]] [root@monitor ~]# echo $? 1 [root@monitor ~]# [[ "a" < "b" ]]
  • 相关阅读:
    C++中的explicitkeyword
    Stream使用教程
    Java实现最长回文串
    Java实现最长回文串
    Java实现最长回文串
    Java实现选择问题
    Java实现选择问题
    Java实现选择问题
    Java实现选择问题
    Java实现选择问题
  • 原文地址:https://www.cnblogs.com/zengkefu/p/5522021.html
Copyright © 2011-2022 走看看