精华内容
下载资源
问答
  • shell test 目录存在
    2020-11-13 09:06:00
    #!/bin/bash
    cd ./bin
    if test -e ./bash
    then
    echo "file exist"
    else
    echo "file not exist"
    fi
    
    if test -e ./bash -o -e ./notfile
    then
            echo "at least one file exist"
    else
            echo "file both not exist"
    fi
    
    输出结果:
    file exist
    at least one file exist

     

    更多相关内容
  • 主要介绍了Shell脚本test命令使用总结和实例,分别对数字测试、字符串测试、文件测试做了总结,并给出了实际使用例子,需要的朋友可以参考下
  • test命令是shell环境中测试条件表达式的实用工具,下面来看看test命令的用法介绍: 语法 test(选项) 选项 -b<文件>:如果文件为一个块特殊文件,则为真; -c<文件>:如果文件为一个字符特殊文件,则为真...
  • hdfs dfs -test -e 文件或目录名 第三步,查看检测结果: echo $? 若输出结果为0,则说明文件或目录存在,若为1,则说明文件或目录存在。 二、Java代码实现 import org.apache.hadoop.conf.Configuration; ...
  • Linux shell判断文件或者目录是否存在

    千次阅读 2022-04-18 14:12:44
    -e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L filename 如果 filename为符号链接,则为真 -r filename 如果 filename可读,则...
    -e filename 如果 filename存在,则为真
    -d filename 如果 filename为目录,则为真
    -f filename 如果 filename为常规文件,则为真
    -L filename 如果 filename为符号链接,则为真
    -r filename 如果 filename可读,则为真
    -w filename 如果 filename可写,则为真
    -x filename 如果 filename可执行,则为真
    -s filename 如果文件长度不为0,则为真
    -h filename 如果文件是软链接,则为真

    1.判断文件是否存在

    #1
    #如果文件夹不存在,创建文件夹
    if [ ! -d "/opt/test/111" ]; then
        mkdir -p /opt/test/111
    fi
    
    #2
    #如果目录/opt/test存在,删除目录
    if [ ! -d "/opt/test" ]; then
        rm -rf /opt/test
    fi

    例如:判断“/opt/test/111”这个目录存不存在,若不存在就创建

    2.判断文件是否存在

    # -f 参数判断 $file 是否存在
    file=/opt/test.txt
    
    if [ ! -f "$file" ]; then
        echo "$file不存在"
    else
        echo "$file已存在"
    fi

     

    3.判断文件夹是否存在并且是否具有可执行权限

    #判断文件,目录是否存在或者具有权限
    
    folder="/var/www/"
    file="/var/www/test"
    
    # -x 参数判断 $folder 是否存在并且是否具有可执行权限
    if [ ! -x "$folder"]; then
        mkdir "$folder"
    fi

     4.判断一个变量是否有值

    # -n 判断一个变量是否有值
    
    if [ ! -n "$var" ]; then
        echo "$var is empty"
    fi

    5.判断两个变量是否相等

    # 判断两个变量是否相等
    if [ "$var1" = "$var2" ]; then
        echo '$var1 eq $var2'
    else
        echo '$var1 not eq $var2'
    fi

    展开全文
  • shelltest命令方法详解

    千次阅读 2022-02-18 15:49:48
    if test (表达式为真) if test !表达式为假 test 表达式1 –a 表达式2 两个表达式都为真 test 表达式1 –o 表达式2 两个表达式有一个为真 2)判断字符串 test –n 字符串 字符串的长度非零 test –z 字符串 字符串的...

    1)判断表达式

    if test (表达式为真)

    if test !表达式为假

    test 表达式1 –a 表达式2 两个表达式都为真

    test 表达式1 –o 表达式2 两个表达式有一个为真

    2)判断字符串

    test –n 字符串 字符串的长度非零

    test –z 字符串 字符串的长度为零

    test 字符串1=字符串2 字符串相等

    test 字符串1!=字符串2 字符串不等

    3)判断整数

    test 整数1 –eq 整数2 整数相等

    test 整数1 –ge 整数2 整数1大于等于整数2

    test 整数1 –gt 整数2 整数1大于整数2

    test 整数1 –le 整数2 整数1小于等于整数2

    test 整数1 –lt 整数2 整数1小于整数2

    test 整数1 –ne 整数2 整数1不等于整数2

    4)判断文件

    test File1 –ef File2 两个文件具有同样的设备号和i结点号

    test File1 –nt File2 文件1比文件2 新

    test File1 –ot File2 文件1比文件2 旧

    test –b File 文件存在并且是块设备文件

    test –c File 文件存在并且是字符设备文件

    test –d File 文件存在并且是目录

    test –e File 文件存在

    test –f File 文件存在并且是正规文件

    test –g File 文件存在并且是设置了组ID

    test –G File 文件存在并且属于有效组ID

    test –h File 文件存在并且是一个符号链接(同-L)

    test –k File 文件存在并且设置了sticky位

    test –b File 文件存在并且是块设备文件

    test –L File 文件存在并且是一个符号链接(同-h)

    test –o File 文件存在并且属于有效用户ID

    test –p File 文件存在并且是一个命名管道

    test –r File 文件存在并且可读

    test –s File 文件存在并且是一个套接字

    test –t FD 文件描述符是在一个终端打开的

    test –u File 文件存在并且设置了它的set-user-id位

    test –w File 文件存在并且可写

    test –x File 文件存在并且可执行

    每一种条件语句的基础都是判断什么是真什么是假。是否了解其工作原理将决定您编写的是质量一般的脚本还是您将引以为荣的脚本。

    Shell 脚本的能力时常被低估,但实际上其能力的发挥受制于脚本撰写者的能力。您了解得越多,您就越能像变戏法似地撰写一个文件来使任务自动化和简化您的管理工作。

    在 shell 脚本中进行的每一种操作(除最简单的命令编组之外)都需要检查条件。所有的 shell 脚本“逻辑” — 广义意义下的“逻辑” — 通常都可以分为以下三大类:

    if {condition exists} then …

    while {condition exists} do …

    until {condition exists} do …

    无论随后的操作是什么,这些基于逻辑的命令都依靠判断一种条件是否真实存在来决定后续的操作。test 命令是使得在每一种情况下都能够确定要判断的条件是否存在的实用工具。因此,彻底了解这个命令对于撰写成功的 shell 脚本至关重要。

    工作原理

    test 命令最短的定义可能是评估一个表达式;如果条件为真,则返回一个 0 值。如果表达式不为真,则返回一个大于 0 的值 — 也可以将其称为假值。检查最后所执行命令的状态的最简便方法是使用 $? 值。出于演示的目的,本文中的例子全部使用了这个参数。

    test 命令期望在命令行中找到一个参数,当 shell 没有为变量赋值时,则将该变量视为空。这意味着在处理脚本时,一旦脚本寻找的参数不存在,则 test 将报告该错误。

    当试图保护脚本时,您可以通过将所有参数包含在双引号中来解决这个问题。然后 shell 将变量展开,如果变量没有值,那么将传递一个空值给 test。另一种方法是在脚本内增加一个额外检查过程来判断是否设置了命令行参数。如果没有设置命令行参数,那么脚本会告诉用户缺少参数,然后退出。我们 会通过一些例子来更具体地说明所有这些内容。

    test 和 [ 命令

    虽然 Linux 和 UNIX 的每个版本中都包含 test 命令,但该命令有一个更常用的别名 — 左方括号:[。test 及其别名通常都可以在 /usr/bin 或 /bin (取决于操作系统版本和供应商)中找到。

    当您使用左方括号而非 test 时,其后必须始终跟着一个空格、要评估的条件、一个空格和右方括号。右方括号不是任何东西的别名,而是表示所需评估参数的结束。条件两边的空格是必需的,这表示要调用 test,以区别于同样经常使用方括号的字符/模式匹配操作。

    test 和 [ 的语法如下:

    test expression

    [ expression ]

    在这两种情况下,test 都评估一个表达式,然后返回真或假。如果它和 if、while 或 until 命令结合使用,则您可以对程序流进行广泛的控制。不过,您无需将 test 命令与任何其它结构一起使用;您可以从命令行直接运行它来检查几乎任何东西的状态。

    因为它们彼此互为别名,所以使用 test 或 [ 均需要一个表达式。表达式一般是文本、数字或文件和目录属性的比较,并且可以包含变量、常量和运算符。运算符可以是字符串运算符、整数运算符、文件运算符或布尔运算符 — 我们将在以下各部分依次介绍每一种运算符。

    test 文件运算符

    利用这些运算符,您可以在程序中根据对文件类型的评估结果执行不同的操作:

    -b file 如果文件为一个块特殊文件,则为真

    -c file 如果文件为一个字符特殊文件,则为真

    -d file 如果文件为一个目录,则为真

    -e file 如果文件存在,则为真

    -f file 如果文件为一个普通文件,则为真

    -g file 如果设置了文件的 SGID 位,则为真

    -G file 如果文件存在且归该组所有,则为真

    -k file 如果设置了文件的粘着位,则为真

    -O file 如果文件存在并且归该用户所有,则为真

    -p file 如果文件为一个命名管道,则为真

    -r file 如果文件可读,则为真

    -s file 如果文件的长度不为零,则为真

    -S file 如果文件为一个套接字特殊文件,则为真

    -t fd 如果 fd 是一个与终端相连的打开的文件描述符(fd 默认为 1),则为真

    -u file 如果设置了文件的 SUID 位,则为真

    -w file 如果文件可写,则为真

    -x file 如果文件可执行,则为真

    以下示例显示了此简单操作的运行情况:

    $ ls -l

    total 33

    drwxr-xr-w 2 root root 1024 Dec 5 05:05 LST

    -rw-rw-rw- 1 emmett users 27360 Feb 6 07:30 evan

    -rwsrwsrwx 1 root root 152 Feb 6 07:32 hannah

    drwxr-xr-x 2 emmett users 1024 Feb 6 07:31 karen

    -rw------- 1 emmett users 152 Feb 6 07:29 kristin

    -rw-r–r-- 1 emmett users 152 Feb 6 07:29 spencer

    $

    $ test -r evan

    $ echo $?

    0

    $ test -r walter

    $ echo $?

    1

    $

    由于第一次评估为真 — 文件存在且可读 — 返回值为真,或 0。由于第二次评估的文件不存在,该值为假,返回值不为零。将值指定为零或非零很重要,因为在失败时不会始终返回 1(虽然这是通常返回的值),可能返回一个非零值。

    正如开头所提到的,除了使用 test 外,您还可以用方括号 [ ] 将命令括住来向 shell 发出同样的命令 — 如下所示:

    $ [ -w evan ]

    $ echo $?

    0

    $ [ -x evan ]

    $ echo $?

    1

    $

    同样,第一个表达式为真,第二个表达式为假 — 正如返回值所指示的那样。您还可以使用以下命令将两个文件彼此进行比较:

    file1 -ef file2 测试以判断两个文件是否与同一个设备相连,是否拥有相同的 inode 编号

    file1 -nt file2 测试以判断第一个文件是否比第二个文件更新(由修改日期决定)

    file1 -ot file2 测试以判断第一个文件是否比第二个文件更旧

    以下示例显示了使用这些运算符比较文件的结果:

    $ [ evan -nt spencer ]

    $ echo $?

    0

    $ [ karen -ot spencer ]

    $ echo $?

    1

    $

    名为 evan 的文件比名为 spencer 的文件更新,因而评估为真。类似地,名为 karen 的文件比名为 spencer 的文件更新,因此该评估为假。

    字符串比较运算符

    如标题所示,这组函数比较字符串的值。您可以检查它们是否存在、是否相同或者是否不同。

    String 测试以判断字符串是否不为空

    -n string 测试以判断字符串是否不为空;字符串必须为 test 所识别

    -z string 测试以判断字符串是否为空;字符串必须为 test 所识别

    string1 = string2 测试以判断 string1 是否与 string2 相同

    string1 != string2 测试以判断 string1 是否与 string2 不同

    对任何变量进行的最有用的测试之一是判断它的值是否不为空,可以简单地将其放在 test 命令行中执行这种测试,如下例所示:

    $ test “$variable”

    强烈建议进行此种测试时用双引号将变量括住,以让 shell 识别变量(即使变量为空)。默认情况下执行的基本字符串评估和 -n 测试从功能上讲是相同的,如以下示例所示:

    #example1

    if test -n “$1”

    then

    echo “$1”

    fi

    执行以上例子中的代码将根据 $1 是否存在给出以下结果:

    $ example1 friday

    friday

    $

    $ example1

    $

    如果将代码更改为以下形式,则结果将相同:

    #example2

    if test “$1”

    then

    echo “$1”

    fi

    如下所示:

    $ example2 friday

    friday

    $

    $ example2

    $

    所有这些表明,通常不需要 -n,它代表默认操作。

    要从一个不同的角度来查看各种可能性,您可以用另一个选项来替换 -n,并检查该值是否为空(相对于非空)。这可以用 -z 选项来实现,代码为:

    #example3

    if test -z “$1”

    then

    echo “no values were specified”

    fi

    运行如下:

    $ example3

    no values were specified

    $ example3 friday

    $

    如果在没有命令行参数的情况下运行该程序,而表达式评估为真,那么将执行程序块中的文本。如果在命令行中有值,则脚本退出,不执行任何操作。将评估操作放在脚本的开头非常有用,这可以在可能产生错误的进一步处理之前预先检查变量值。

    其余的字符串运算符对两个变量/字符串之间的精确匹配或其中的差异(您也可以称之为等价性和“不等价性”)进行评估。第一个例子对匹配进行测试:
    

    $ env

    LOGNAME=emmett

    PAGER=less

    SHELL=/bin/bash

    TERM=linux

    $

    $ [ “$LOGNAME” = “emmett” ]

    $ echo $?

    0

    $

    $ [ “$LOGNAME” = “kristin” ]

    $ echo $?

    1

    $

    或者,该评估可以以脚本的形式用于决定是否运行脚本:

    #example4

    if [ “$LOGNAME” = “emmett” ]

    then

    echo “processing beginning”

    else

    echo “incorrect user”

    fi

    这种方法可以用来寻找任意的值(如终端类型或 shell 类型),在允许脚本运行之前这些值必须匹配。请注意,= 或 != 运算符的优先级高于其它大多数可指定选项,且要求必须伴有表达式。因此,除了比较字符串的选项之外,= 或 != 都不能和检查某种东西(如可读文件、可执行文件或目录)的存在性的选项一起使用。

    整数比较运算符

    正如字符串比较运算符验证字符串相等或不同一样,整数比较运算符对数字执行相同的功能。如果变量的值匹配则表达式测试为真,如果不匹配,则为假。整数比较运算符不处理字符串(正如字符串运算符不处理数字一样):

    int1 -eq int2 如果 int1 等于 int2,则为真

    int1 -ge int2 如果 int1 大于或等于 int2,则为真

    int1 -gt int2 如果 int1 大于 int2,则为真

    int1 -le int2 如果 int1 小于或等于 int2,则为真

    int1 -lt int2 如果 int1 小于 int2,则为真

    int1 -ne int2 如果 int1 不等于 int2,则为真

    以下示例显示了一个代码段,其中在命令行中给出的值必须等于 7:

    #example5

    if [ $1 -eq 7 ]

    then

    echo “You’ve entered the magic number.”

    else

    echo “You’ve entered the wrong number.”

    fi

    运行中:

    $ example5 6

    You’ve entered the wrong number.

    $

    $ example5 7

    You’ve entered the magic number.

    $

    和字符串一样,比较的值可以是在脚本外为变量赋的值,而不必总是在命令行中提供。以下示例演示了实现这一点的一种方法:

    #example6

    if [ $1 -gt $number ]

    then

    echo “Sorry, but $1 is too high.”

    else

    echo “$1 will work.”

    fi

    $ set number=7

    $ export number

    $ example6 8

    Sorry, but 8 is too high.

    $ example6 7

    7 will work.

    $

    整数比较运算符最佳的用途之一是评估指定的命令行变量的数目,并判断它是否符合所要求的标准。例如,如果某个特定的命令只能在有三个或更少变量的情况下运行,

    #example7 - display variables, up to three

    if [ “$#” -gt 3 ]

    then

    echo “You have given too many variables.”

    exit $#

    fi

    只要指定三个或更少的变量,该示例脚本将正常运行(并返回值 0)。如果指定了三个以上的变量,则将显示错误消息,且例程将退出 — 同时返回与命令行中给定的变量数相等的退出代码。

    对这个过程进行修改可以用来在允许运行报表之前判断当天是否是本月的最后几天:

    #example8 - to see if it is near the end of the month#

    set date # use backward quotes

    if [ “$3” -ge 21 ]

    then

    echo “It is close enough to the end of the month to proceed”

    else

    echo “This report cannot be run until after the 21st of the month”

    exit $3

    fi

    在这个例子中,设置了六个变量(通过空格彼此分开):

    $1 = Fri

    $2 = Feb

    $3 = 6

    $4 = 08:56:30

    $5 = EST

    $6 = 2004

    这些值可以在脚本中使用,就像它们是在命令行中输入的一样。请注意,退出命令再次返回一个值 — 在这种情况下,返回的值是从 $3 的值中得到的日期。这一技巧在故障诊断时会非常有用 — 如果您认为脚本应该运行而没有运行,那么请查看 $? 的值。

    一种类似的想法可能是撰写一个只在每个月的第三个星期三运行的脚本。第三个星期三一定在该月的 15 日到 21 日之间。使用 cron,您可以调用脚本在 15 日到 21 日之间每天的一个指定时间运行,然后使用脚本的第一行检查 $1(在设置日期之后)的值是否为 Thu。如果为 Thu,那么执行剩下的脚本,如果不是,则退出。

    而另一个想法可能是,只允许脚本在超过 6:00 p.m. (18:00),所有用户都回家之后运行。只要撰写脚本,使其在值低于 18 时退出,并通过使用以下命令来获取时间(将其设为 $1)

    set date +%H

    布尔运算符

    布尔运算符在几乎每种语言中的工作方式都相同 — 包括 shell 脚本。在 nutshell 中,它们检查多个条件为真或为假,或者针对假的条件而不是真的条件采取操作。与 test 搭配使用的运算符有

    ! expr 如果表达式评估为假,则为真

    expr1 -a expr2 如果 expr1 和 expr2 评估为真,则为真

    expr1 -o expr2 如果 expr1 或 expr2 评估为真,则为真

    可以用 != 运算符代替 = 进行字符串评估。这是最简单的布尔运算符之一,对 test 的正常结果取非。

    其余两个运算符中的第一个是 -a(即 AND)运算符。要使测试最终为真,两个表达式都必须评估为真。如果任何一个评估为假,则整个测试将评估为假。例如,

    $ env

    HOME=/

    LOGNAME=emmett

    MAIL=/usr/mail/emmett

    PATH=:/bin:/usr/bin:/usr/lbin

    TERM=linux

    TZ=EST5:0EDT

    $

    $ [ “ L O G N A M E " = " e m m e t t " − a " LOGNAME" = "emmett" -a " LOGNAME"="emmett"a"TERM” = “linux” ]

    $ echo $?

    0

    $

    $ [ “LOGNAME” = “karen” -a “$TERM” = “linux” ]

    $ echo $?

    1

    $

    在第一个评估中,两个条件都测试为真(在一个 linux 终端上登录的是 emmett),因此整个评估为真。在第二个评估中,终端检查正确但用户不正确,因此整个评估为假。

    简而言之,AND 运算符可以确保代码只在两个条件都满足时才执行。相反,只要任何一个表达式测试为真,OR (-o) 运算符即为真。我们来修改先前的例子,并将其放到一个脚本中来说明这一点:

    #example9

    if [ “ L O G N A M E " = " e m m e t t " − o " LOGNAME" = "emmett" -o " LOGNAME"="emmett"o"TERM” = “linux” ]

    then

    echo “Ready to begin.”

    else

    echo “Incorrect user and terminal.”

    fi

    $ env

    HOME=/

    LOGNAME=emmett

    MAIL=/usr/mail/emmett

    PATH=:/bin:/usr/bin:/usr/lbin

    TERM=linux

    TZ=EST5:0EDT

    $ example9

    Ready to begin.

    $

    $ LOGNAME=karen

    $ example9

    Ready to begin.

    $

    在脚本第一次运行时,评估判断用户是否等于 emmett。如果发现用户等于 emmett,则脚本转至 echo 语句,并跳过其余的检查。它从不检查终端是否等于 linux,因为它只需要找到一条为真的语句就可以使整个运算为真。在脚本第二次运行时,它判断用户不是 emmett,因此它将检查并发现终端确实是 linux。由于一个条件为真,脚本现在转至 echo 命令。为了引出第二条消息,两个条件都必须为假。

    在先前确定时间是否为月末的例子中,可以执行类似的检查来防止用户试图在周末运行脚本:

    #example10 - Do not let the script run over the weekend#

    set date # use backward quotes

    if [ “$1” = “Sat” -o “$1” = “Sun” ]

    then

    echo “This report cannot be run over the weekend.”

    fi

    一些有用的示例

    示例 1:在脚本文件中出现的“逻辑”的最简单的形式(如本文所有示例中所示)是“if … then”语句。先前的一个代码段检查是否存在一定数量的变量,然后将这些变量回显。假设我们对此稍微做一些修改,比如我们想回显变量,并且每次回显均减 去最左边的变量,以显示一个倒的三角形。

    虽然这听起来很简单,但实际并非如此;这是您在执行大规模处理时想实现的方式:处理第一个变量、转移、处理下一个变量……

    出于演示的目的,可以按以下方式撰写脚本中的重要行:

    #example11 - display declining variables, up to three

    if [ “$#” -gt 3 ] # see if more than three variables are given

    then

    echo “You have given more than three variables.”

    exit

    fi

    echo $*

    if test -n “$2”

    then

    shift

    echo $*

    fi

    if test -n “$2”

    then

    shift

    echo $*

    fi

    它将按以下方式执行:

    $ example11 one

    one

    $

    $ example11 one two

    one two

    two

    $

    $ example11 one two three

    one two three

    two three

    three

    $

    $ example11 one two three four

    You have given more than three variables.

    $

    出于检查的目的将数量限制为三个变量的原因是减少在例子中要检查的行数。一切都按部就班地进行,虽然它令人难以置信地混乱;用户因使用了超过程序依设计所能处理的变量数而得到警告,且脚本退出。如果变量数为 3 或更少,则运算的核心部分开始执行。

    回显变量,执行测试以查看另一个变量是否存在。如果另一个变量存在,则执行一次转移,回显该变量,执行另一测试,等等。总共使用了 16 个有效行,而程序仅能处理不超过三个变量 — 非常混乱。假设消除变量数的限制,程序可以处理任意数量的变量。经过一些修改,脚本被缩短(美化)了,并能处理任意数量的变量:

    #example12 - display declining variables, any number

    while [ “$#” -gt 0 ]

    do

    echo $*

    shift

    done

    $ example12 1 2 3 4 5 6 7 8 9 0

    1 2 3 4 5 6 7 8 9 0

    2 3 4 5 6 7 8 9 0

    3 4 5 6 7 8 9 0

    4 5 6 7 8 9 0

    5 6 7 8 9 0

    6 7 8 9 0

    7 8 9 0

    8 9 0

    9 0

    0

    现在减少到只有 5 个有效行,且消除了第一个脚本三个变量的限制,并在运行时要更高效。

    示例 2:无论何时当在脚本内执行与处理相关的操作时,下一个操作将始终检查上一操作的状态,以确认它已成功完成。您可以通过检查 $? 的状态并验证它等于 0 来实现这一目的。例如,如果一个数据目录是否能访问非常重要,

    #example13

    TEMP=LST

    cd $TEMP

    if [ $?-ne 0 ]

    then

    echo “Data directory could not be found.”

    Exit

    fi

    处理错误

    资源

    下载针对 Linux 的 Oracle 数据库 10g

    Oracle 数据库 10g 第 1 版 (10.1.0.2) 现在可用于 Linux x86 和 Linux Itanium 平台;请在此从 OTN 上免费下载。

    访问 Linux 技术中心

    收藏本页,以获取关于 Linux 系统管理员最佳应用的一般技术信息,以及关于 Oracle-on-Linux 产品群的具体技术信息。

    相关文章

    Linux 相关技术文章的存档

    test 命令常常出现的错误事实上只有两种类型。第一种是未使用正确的评估类型,例如将字符串变量与整型变量进行比较或者将带填充的字符串与不带填充的字符串进行比较。仔细评估您使用的变量将使您最终找到错误的根源,并让您能够解决这些问题。

    第二种错误类型包括将方括号误认为别名之外的某个东西。方括号与其内容之间必须有一个空格;否则,它们将不能解释其中的对象。例如,

    $ [ “$LOGNAME” -gt 9]

    test:] missing

    $

    请注意,错误消息指示 test 存在问题,即使使用了别名 ]。这些问题很容易发现,因为错误消息准确地将这些问题显示出来,然后您可以增加必要的空格。

    结论

    要在 shell 脚本中构建逻辑,您必须添加条件语句。每一条这种语句的核心都是对条件的评估,以判断它是否存在 — 通过使用 test 命令完成评估。了解它和它的别名(左方括号 ([)的工作原理将使您能够撰写可以完成一些复杂操作的 shell 脚本

    展开全文
  • 本文主要介绍了linux shell 中判断文件、目录是否存在的方法,分享给大家-e filename 如果 filename存在,则为真-d filename 如果 filename为目录,则为真-f filename 如果 filename为常规文件,则为真-L filename ...

    本文主要介绍了linux shell 中判断文件、目录是否存在的方法,分享给大家

    -e filename 如果 filename存在,则为真

    -d filename 如果 filename为目录,则为真

    -f filename 如果 filename为常规文件,则为真

    -L filename 如果 filename为符号链接,则为真

    -r filename 如果 filename可读,则为真

    -w filename 如果 filename可写,则为真

    -x filename 如果 filename可执行,则为真

    -s filename 如果文件长度不为0,则为真

    -h filename 如果文件是软链接,则为真

    常用例子

    如果存在某文件,则删除

    if [ -f trials ]; then rm ${result_path}trials; fi

    如果没有文件夹,则创建

    if [ ! -d $result_name ];then

    mkdir -p $result_name

    fi

    shell命令判断文件或文件夹是否存在,先直接看实例:

    #!/bin/sh

    #判断文件存在,判断是否为文件夹等

    testPath="/Volumes/MacBookProHD/Mr.Wen/08 shell命令"

    testFile="/Volumes/MacBookProHD/Mr.Wen/08 shell命令/fileWen"

    #判断文件夹是否存在 -d

    if [[ ! -d "$testPath" ]]; then

    echo "文件夹不存在"

    else

    echo "文件夹存在"

    fi

    #判断文件夹是否存在,并且具有可执行权限

    if [[ ! -x "$testFile" ]]; then

    echo "文件不存在并且没有可执行权限"

    else

    echo "文件存在并有可执行权限"

    fi

    #判断文件是否存在

    if [[ ! -f "$testFile" ]]; then

    echo "文件不存在"

    else

    echo "文件存在"

    fi

    在shell命令脚本编写当中,会遇到各种对文件的判断,除了以上常用的判断,还有其他的可以使用,如下:

    Conditional Logic on Files

    -a file exists.

    -b file exists and is a block special file.

    -c file exists and is a character special file.

    -d file exists and is a directory.

    -e file exists (just the same as -a).

    -f file exists and is a regular file.

    -g file exists and has its setgid(2) bit set.

    -G file exists and has the same group ID as this process.

    -k file exists and has its sticky bit set.

    -L file exists and is a symbolic link.

    -n string length is not zero.

    -o Named option is set on.

    -O file exists and is owned by the user ID of this process.

    -p file exists and is a first in, first out (FIFO) special file or

    named pipe.

    -r file exists and is readable by the current process.

    -s file exists and has a size greater than zero.

    -S file exists and is a socket.

    -t file descriptor number fildes is open and associated with a

    terminal device.

    -u file exists and has its setuid(2) bit set.

    -w file exists and is writable by the current process.

    -x file exists and is executable by the current process.

    -z string length is zero.

    shell 判断文件内容是否改变

    判断文件内容是否改变:

    1)md5值判断

    2)diff 判断

    #添加日志时间戳

    function fn_showlog()

    {

    local curtime;

    curtime=`date +"%Y%m%d-%H:%M:%S"`

    echo "$curtime ------ $1";

    }

    #判断文件内容是否一致

    function diff_file(){

    for file in `ls $1`

    do

    if [ ! -f "$2$file" ];then

    fn_showlog "存在新增文件:$2$file"

    return 0

    else

    diff $file $2$file

    if [ $? -ne 0 ];then

    fn_showlog "文件内容发生变化:$file"

    return 0

    fi

    fi

    done

    return 1

    }

    diff_file "python*Ip" "/home/admin/tools/"

    if [ $? -eq 0 ];then

    fn_showlog "内容发生改变......"

    else

    fn_showlog "内容未发生改变,退出脚本!"

    exit 0

    fi

    到此这篇关于linux shell 中判断文件、目录是否存在的方法的文章就介绍到这了,更多相关linux shell判断文件存在内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:bash判断文件或文件夹是否存在的shell代码

    判断Linux Shell环境变量是否存在

    Shell脚本判断Apache进程是否存在

    Shell实现判断进程是否存在并重新启动脚本分享

    shell判断文件,目录是否存在或者具有权限的代码

    判断文件是否存在的shell脚本代码

    Linux Shell中判断进程是否存在的代码

    展开全文
  • shelltest命令用法详解

    千次阅读 2020-12-26 21:51:33
    1) 与文件检测相关的 test 选项 表1:test 文件检测相关... 判断文件是否存在,并且是否为目录文件。 -e filename 判断文件是否存在。 -f filename 判断文件是否存在,井且是否为普通文件。 -L filename
  • shell脚本编程之test命令使用

    千次阅读 2022-03-29 16:56:21
    文章目录test 命令语法数值比较字符串比较文件比较(shell 编程中使用较多) shell 脚本编程中的 test 命令给 if-then 等语句提供了一种测试条件的手段,按照测试条件的比较场景,可分为数值比较、字符串比较及文件...
  • 既然有需求,当然就有解决的办法了,Shell中的test命令,可以用来检测文件的类型或者比较数值是否相等,该命令也能用来检查文件是否存在。 可以用如下的命令来进行检查: test -e filename [ -e filename ] test -f...
  • shelltest命令的用法详解

    千次阅读 2020-02-19 17:17:08
    testShell 内置命令,用来检测某个条件是否成立。test 通常和 if 语句一起使用,并且大部分 if 语句都依赖 testtest 命令有很多选项,可以进行数值、字符串和文件三个方面的检测。 Shell test 命令的用法为:...
  • Shell test命令和[ ]

    2017-10-19 16:22:34
    testShell 内置命令,用来检测某个条件是否成立。test 通常和 if 语句一起使用,并且大部分 if 语句都依赖 testtest 命令有很多选项,可以进行数值、字符串和文件三个方面的检测。 Shell test 命令的用法为:...
  • Shell test命令

    千次阅读 2016-08-30 22:11:43
    概述Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。或者使用 [ ] 来判断数值测试#!/bin/bash num1=100 num2=100 if test $[num1] -eq $[num2] then echo '两个数相等!...
  • 判断目录是否为空 #!/bin/sh echo "----------$(date +%Y年%m月%d日' '%T)测试(test.sh)----------" BAK=/opt/sh/test ##判断目录是否为空,为空则删除 if [ "`ls -A ${BAK}`" = "&...
  • echo "文件存在已重建" rm -rf sharefile else echo "文件不存在" fi array[0]=FYCK; array[1]=GUACK; array[2]=JCW; array[3]=SJCK; array[4]=PJZ; array[5]=SJZ; for ((i=0;i<6;i++)) do mkdir -p sharefile/${...
  • shell 脚本如何判断文件是否存在

    万次阅读 2022-03-22 17:53:06
    Linux系统脚本编程判断文件是否存在的所有选项,包含判断是否常规文件、是否目录、是否链接文件、是否可执行文件等。
  • 主要介绍了使用Bash Shell目录中的文件实现递归式拷贝,适用于Ubuntu等Debian系的Linux系统,需要的朋友可以参考下
  • shell中关于变量是否存在的问题

    千次阅读 2021-05-12 13:45:13
    [TOC]## fish shell判断某个变量是否存在fish shell 判断变量是否存在直接使用 `test 变量`就可以,然后我们使用`and`和`or`实现if..else..的逻辑。如下所示:```bash#!/usr/bin/env fishset a 1set b 3test $a -gt ...
  • 本文主要记录一波linux中shell脚本用if语句判断文件或目录是否存在,并且以jenkins自动发布覆盖项目和历史版本记录为例,让大家跟好的理解shell脚本的灵活。 二、基础知识 1.脚本注意要点: .sh结尾的开头要加...
  • Shell打印输出命令 1. echo命令 Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:echo string 您可以使用echo实现更复杂的输出格式控制。 1.1 显示普通字符串 echo "It is a test" ...
  • 在远程主机10.162.134.203上是存在/home/scopsadm/scripts/changePassword/changePassword.sh脚本文件的:[ibmadmin@usda5p-scop-mon01 ~]$ if ssh -i ~/.ssh/scopsadm_rsa scopsadm@10.162.134.203 test -e /home/...
  • 昨天朋友问怎么实现在shell,里面实现循环判断A文件是否存在,不存在的时候从别的目录拷贝文件 实现的思路很简单,首先实现判断文件是否存在,不存在的拷贝,然后价格死循环即可。 #!/bin/sh myFile="/home/zexin/...
  • shell if语句和test命令

    千次阅读 2017-09-10 17:28:09
    shell中if条件判断语句和我们的C、C++、Java等语言是不同的,shell的if语句条件必须用[ ]括起来,另外[ ]里外都需要用空格与周围隔开(例如[ a==b ]),否则报错;另外与if配对的有else if和else,如果我们要写这两...
  • rm -f (--force) #强制删除文件或目录:忽略不存在的文件,不提示确认 rm -i (interactive) #删除既有文件或目录之前先询问用户 rm -r或-R (--recursive) #递归删除,防止目录里面有文件不能删除 rm -rf
  • 创建一个shell脚本 命名为test.sh #!/bin/sh #判断目录是否存在 if [ ! -d "netperf-2.7.0/" ] then echo "目录存在" else echo "目录存在" fi #判断文件是否存在 if [ ! -f &...
  • Shell中if-test命令

    千次阅读 2020-02-15 19:49:28
    testshell内置命令,用来检测某个条件是否成立 test通常和if语句一起使用,并且大部分if语句都依赖test shell test命令的用法有两种: 第一种: test expression #当test判断expression成立时,退出状态为0,否则...
  • linux_shell.tar.gz

    2021-07-03 18:30:36
    Linux教学项——基础环境及命令教学(linux_study.md),包括常用脚本为: ...test6.sh 判断文件及文件夹存在等基础操作 test7.sh 获取当前网段下存活主机信息 test8.sh 添加用户并配置对应登录密码(root权限)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 183,376
精华内容 73,350
关键字:

shell test 目录存在