• shell中特殊变量及if条件


    特殊变量:

    linux中shell变量$#,$@,$0,$1,$2的含义解释: 
    变量说明: 
    $$ 
    Shell本身的PID(ProcessID) 
    $! 
    Shell最后运行的后台Process的PID 
    $? 
    最后运行的命令的结束代码(返回值) 
    $- 
    使用Set命令设定的Flag一览 
    $* 
    所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 
    $@ 
    所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2""$n" 的形式输出所有参数。 
    $# 
    添加到Shell的参数个数 
    $0 
    Shell本身的文件名 
    $1~$n 
    添加到Shell的各参数值。$1是第1参数、$2是第2参数…。 

    整数比较:

    -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中其他参数:

    -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是否硬连接到同一个文件

    字符串比较:

    =                         等于           if [ "$a" = "$b" ]
    ==                        与=等价
    !=                        不等于         if [ "$a" = "$b" ]
    <                         小于,在ASCII字母中的顺序:
                              if [[ "$a" < "$b" ]]
                              if [ "$a" < "$b" ]         #需要对<进行转义
    >                         大于
    -z                        字符串为null,即长度为0
    -n                        字符串不为null,即长度不为0
    #如果没有参数被传递到脚本中, 那么就使用
    #当前目录. 否则就是用传递进来的参数作为目录
    #来搜索.
    [ $# -eq 0 ] && directorys=`pwd` || directorys=$@
    
    #编写函数linkchk用来检查传递进来的目录或文件是否是链接, 
    #并判断这些文件或目录是否存在. 然后打印它们所指向的文件.
    #如果传递进来的元素包含子目录, 
    #那么把子目录也放到linkcheck函数中处理, 这样就达到了递归的目的.
    ##########
    linkchk () {
    for element in $1/*; do
    [ -h "$element" -a ! -e "$element" ] && echo "$element"
    [ -d "$element" ] && linkchk $element
    # 当然, '-h'用来测试符号链接, '-d'用来测试目录.
    done
    }
    
    #把每个传递到脚本的参数都送到linkchk函数中进行处理, 
    #检查是否有可用目录. 如果没有, 那么就打印错误消息和
    #使用信息.
    ################
    for directory in $directorys; do
    if [ -d $directory ]
    then linkchk $directory
    else 
    echo "$directory is not a directory"
    echo "Usage: $0 dir1 dir2 ..."
    fi
    done
    
    exit 0
  • 相关阅读:
    Ant Design Pro:Layout 组件——嵌套布局
    React实战之将数据库返回的时间转换为几分钟前、几小时前、几天前的形式。
    React实战之Ant Design—Upload上传_附件上传
    React实战之60s倒计时按钮(发送短信验证按钮)
    map方法到底会不会改变原始数组?
    【React】react开发vscode插件推荐
    【React】React 工程的 VS Code 插件及配置
    【React】react新特性实例详解(memo、lazy、suspense、hooks)
    数组常用slice和splice的区别
    【React】react-beautiful-dnd 实现组件拖拽
  • 原文地址:https://www.cnblogs.com/zx3212/p/8328200.html
Copyright © 2020-2023  润新知