zoukankan      html  css  js  c++  java
  • Bash脚本中的操作符

    一、文件測试操作符
    假设以下的条件成立将会返回真.
    -e
    文件存在
    -a
    文件存在
    这个选项的效果与-e同样. 可是它已经被"弃用"了, 而且不鼓舞使用.
    -f
    表示这个文件是一个 一般 文件(并非文件夹或者设备文件)
    -s
    文件大小不为零
    -d
    表示这是一个文件夹
    -b
    表示这是一个块设备(软盘, 光驱, 等等.)
    -c
    表示这是一个字符设备(键盘, modem, 声卡, 等等.)
    -p
    这个文件是一个管道
    -h
    这是一个符号链接
    -L
    这是一个符号链接
    -S
    表示这是一个socket
    -t
    文件(描写叙述符)被关联到一个终端设备上
    这个測试选项一般被用来检測脚本中的 stdin ( [
    终端.
    -t 0 ] )
    或者 stdout ( [
    -t 1 ] )是否来自于一个
    -r
    文件是否具有可读权限( 指的是正在执行这个測试命令的用户是否具有读权限)-w
    文件是否具有可写权限(指的是正在执行这个測试命令的用户是否具有写权限)
    -x
    文件是否具有可运行权限(指的是正在运行这个測试命令的用户是否具有可运行权限)
    -g
    set-group-id(sgid)标记被设置到文件或文件夹上
    假设文件夹具有 sgid 标记的话, 那么在这个文件夹下所创建的文件将属于拥有这个文件夹的用户组, 而
    不必是创建这个文件的用户组. 这个特性对于在一个工作组中共享文件夹很实用.
    -u
    set-user-id (suid)标记被设置到文件上
    假设一个root用户所拥有的二进制可运行文件设置了 set-user-id 标记位的话, 那么普通用户也会
    以root权限来执行这个文件. [1] 这对于须要訪问系统硬件的执行程序(比方pppd和cdrecord)非
    常实用. 假设没有suid标志的话, 这些二进制运行程序是不可以被非root用户调用的.
    -rwsr-xr-t
    1 root
    178236 Oct
    2
    2000
    /usr/sbin/pppd
    对于设置了 suid 标志的文件, 在它的权限列中将会以s 表示.
    -k
    设置 粘贴位
    对于"粘贴位"的一般了解, save-text-mode标志是一个文件权限的特殊类型. 假设文件设置了这
    个标志, 那么这个文件将会被保存到缓存中, 这样能够提高訪问速度. [2] 粘贴位假设设置在目
    录中, 那么它将限制写权限. 对于设置了粘贴位的文件或文件夹, 在它们的权限标记列中将会显
    示t .
    drwxrwxrwt
    7 root
    1024 May 19 21:26 tmp/
    假设用户并不拥有这个设置了粘贴位的文件夹, 可是他在这个文件夹下具有写权限, 那么这个用户仅仅
    能在这个文件夹下删除自己所拥有的文件. 这将有效的防止用户在一个公共文件夹中不慎覆盖或者删
    除别人的文件. 比方说 /tmp 文件夹. (当然, 文件夹的全部者或者 root用户能够任意删除或重命名当中
    的文件.)
    -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" ]
    与=等价.
    ==比較操作符在双中括号对和单中括号对中的行为是不同的.


     [[ $a == z* ]]
    # 假设$a以"z"开头(模式匹配)那么结果将为真
     [[ $a == "z*" ]] # 假设$a与z*相等(就是字面意思全然一样), 那
    么结果为真.
     
     [ $a == z* ]
    # 文件扩展匹配(file globbing)和单词切割有
    效.
     [ "$a" == "z*" ] # 假设$a与z*相等(就是字面意思全然一样), 那
    #么结果为真.


     
    !=
    不等号
    if [ "$a" != "$b" ]
    这个操作符将在[[ ... ]]结构中使用模式匹配.
    <
    小于, 依照ASCII字符进行排序
    if [[ "$a" < "$b" ]]
    if [ "$a" < "$b" ]
    注意"<"使用在 [
    ] 结构中的时候须要被转义.
    >
    大于, 依照ASCII字符进行排序
    if [[ "$a" > "$b" ]]
    if [ "$a" > "$b" ]
    注意">"使用在 [
    ] 结构中的时候须要被转义.
    參考样例 26-11, 这个样例展示了怎样使用这个比較操作符.
    -z
    字符串为"null", 意思就是字符串长度为零
    -n
    字符串不为"null".
    当 -n 使用在中括号里进行条件測试的时候, 必需要把字符串用双引號引用起来. 假设採用了未引用的字符串来使用 ! -z , 甚至是在条件測试中括号(參
    见样例 7-6)中仅仅使用未引用的字符串的话, 一般也是能够工作的, 然而,
    这是一种不安全的习惯. 习惯于使用引用的測试字符串才是正路.


    compound comparison
    -a
    逻辑与
    exp1 -a exp2
    假设表达式exp1和exp2都为真的话, 那么结果为真.
    -o
    逻辑或
    exp1 -o exp2
    假设表达式exp1和exp2中至少有一个为真的话, 那么结果为真.
    这与Bash中的比較操作符&&和||很相像, 可是这个两个操作符是用在双中括号结构中的.
     [[ condition1 && condition2 ]]
    -o和-a操作符一般都是和test命令或者是单中括号结构一起使用的.
     if [ "$exp1" -a "$exp2" ]


    注意事项
     在一个混合測试中, 即使使用引用的字符串变量也可能还不够.
    假设 $string 为空的话, [ -n "$string" -o "$a" = "$b" ] 可能会在某些版本号的Bash中产生
    错误. 安全的做法是附加一个额外的字符给可能的空变量, [ "x$string" != x -o "x$a" =
    "x$b" ] ("x"字符是能够相互抵消的).

  • 相关阅读:
    zookeeper常用命令
    linux查看日志相关命令
    第三十一期: VueRouter源码浅析 传统前端和多媒体前端
    第二十八期:模型,模块,组件,框架和架构
    星际2光速注卵
    星际心得
    英语词根研究和单词记忆
    星际2如何离线模式打电脑和rpg地图练操作
    星际研究
    第一篇帖子:不利用中间变量交换两个数字的小算法题
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6946716.html
Copyright © 2011-2022 走看看