1.概述

允许测试Linux文件系统上文件的目录和状态。

2.详解

2.1 检查目录

-d测试会检查指定的目录是否存在于系统中。当我们打算将文件写入目录或是准备切换到该目录时,先进行测试是比较好的做法。

#!/bin/bash
#Look before you leap
#
jump_dir=/home/songzhen
#
if [ -d $jump_dir ]
then
echo "The $jump_dir directory exists"
cd $jump_dir
ls
else
echo "The $junp_dir directory does not exist"
fi

执行该脚本,结果如下:

2.2 检查对象是否存在(文件或目录)

-e比较允许你的脚本代码在使用文件或者目录前先检查它们是否存在。

#!/bin/bash
#Check if either a directory or file exists
#
location=$HOME
file_name="sentinel"
#
if [ -e $location ]
then
echo "OK on the $location directory."
echo "Now checking on the file, $file_name."
#
if [ -e $location/$file_name ]
then
echo "OK on the filename"
echo "Updating Current Date..."
date >> $location/$file_name
#
else
echo "File not exist"
echo "touch the File"
touch $file_name
fi
#
else
echo "The $location directory does not exist."
echo "Nothing to update"
fi

执行该脚本,结果如下:

2.3 检查文件

如果确定了对象为文件,必须用-f比较。

#!/bin/bash
#Check if either a directory or file exists
#
item_name=$HOME
echo
echo "The item being checked: $item_name"
echo
#
if [ -e $item_name ]
then
echo "The item, $item_name, does exist."
echo "But is it a file?"
echo
#
if [ -f $item_name ]
then
echo "Yes, $item_name is a file."
else
echo "No, $item_name is not a file."
fi
#
else
echo "The item, $item_name, does not exist."
echo "Nothing to update"
fi

执行该脚本,结果如下:

2.4 检查是否可读

在尝试从文件中读取数据之前,最好先测试一下文件是否可读,可以使用-r比较测试。

#!/bin/bash
#testing if you can read a file
pwfile=/etc/shadow
#
# first, test if the file exists, and is a file
if [ -f $pwfile ]
then
#now test if you can read it
if [ -r $pwfile ]
then
tail $pwfile
else
echo "Sorry, I am unable to read the $pwfile file"
fi
else
echo "Sorry, the file $pwfile does not exist"
fi

执行该脚本,结果如下:

2.5 检查是否可写

-w比较会判断你对文件是否有可写权限。

#!/bin/bash
#Check if either a directory or file exists
#
item_name=$HOME/sentinel
echo
echo "The item being checked: $item_name"
echo
#
if [ -e $item_name ]
then
echo "The item, $item_name, does exist."
echo "But is it a file?"
echo
#
if [ -f $item_name ]
then
echo "Yes, $item_name is a file."
echo "But is it writable?"
echo
#
if [ -w $item_name ]
then
echo "Writing current time to $item_name"
date +%H%M >> $item_name
#
else
echo "Unable to write to $item_name"
fi
#
else
echo "No, $item_name is not a file."
fi
#
else
echo "The item, $item_name, does not exist."
echo "Nothing to update"
fi
#

执行该脚本,结果如下:

2.6 检查空文件

用-s比较来检查文件是否为空,尤其是在不想删除非空文件时经常使用,-s比较成功则说明文件中有数据。

#!/bin/bash
#Testing if a file is empty
#
file_name=$HOME/sentinel
#
if [ -f $file_name ]
then
if [ -s $file_name ]
then
echo "The $file_name file exists and has data in it."
echo "will not remove this file."
else
echo "The $file_name file exists but is empty."
echo "Deleting empty file..."
rm $file_name
fi
else
echo "The $file_name does not exist."
fi

执行该脚本,结果如下:

2.7 检查文件是否可以执行

-x比较是判断特定文件是否有执行权限的一个简单办法。

#!/bin/bash
#testing file execution
#
if [ -x test9.sh ]
then
echo "You can run the script:"
else
echo "Sorry,You are unable to execute the script"]
fi

执行该脚本,结果如下:

2.8 检查所属关系

-O比较可以测试出你是否是文件的属主

#!/bin/bash
#check file ownership
#
if [ -O /etc/passwd ]
then
echo "You are the owner of the /etc/passwd file"
else
echo "Sorry, you are not the owner of the /etc/passwd file"
fi

执行该脚本,结果如下:

2.9 检查默认属组关系

-G比较会检查文件的默认组,如果它匹配了用户的默认组,则测试成功,-G比较只会检查默认组而非用户所属的所有组。

#!/bin/bash
#check file group test
#
if [ -G $HOME/testing ]
then
echo "You are in the same group as the file"
else
echo "The file is not owned by your group"
fi

执行该脚本,结果如下:

2.10 检查文件日期

-nt和-ot用来对两个文件的创建日期进行比较,在编写软件安装脚本时非常有用,但是要注意的是要先确认文件是存在的。

#!/bin/bash
#testing file dates
if [ test9.sh -nt test8.sh ]
then
echo "The test9.sh file is newer than test8.sh."
else
echo "The test8.sh file is newer than test9.sh."
fi

执行该脚本,结果如下:

shell脚本编程基础--文本比较的更多相关文章

  1. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  2. SHELL脚本编程基础知识

    SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...

  3. shell脚本编程基础介绍

    Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...

  4. linux基础—课堂随笔_03 SHELL脚本编程基础

    shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then条件为真的分支代码 fi(结尾) 双分支 if(开头)判断条件:then条件为真的分 ...

  5. shell脚本编程基础

       最近学习了shell脚本编程,感觉自己的脚本写的不太好,所以想把shell脚本相关的知识系统的整理一下,便于以后的学习和使用. 一.shell脚本基础    shell脚本是利用shell的功能 ...

  6. Linux Shell脚本编程-基础1

    概述:  shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...

  7. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  8. Linux基础篇–shell脚本编程基础

    本章内容概要  编程基础  脚本基本格式  变量  运算  条件测试  配置用户环境 7.1 编程基础程序:指令+数据程序编程风格:   过程式:以指令为中心,数据服务于指令   对象式:以数据为中心 ...

  9. Shell脚本编程基础笔记一

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8176137.html 一:脚本文件的创建.格式.运行 1:创建shell脚本 首先,要创建一个文件 touch ...

随机推荐

  1. python变量和运算

    本文收录在Python从入门到精通系列文章系列 1. 指令和程序 计算机的硬件系统通常由五大部件构成,包括:运算器.控制器.存储器.输入设备和输出设备. 其中,运算器和控制器放在一起就是我们通常所说的 ...

  2. NOIP模拟 13

    我终于又厚颜无耻地赖着没走 ...... T1 矩阵游戏 用了30hmin找规律,然后发现貌似具有交换律,然后发现貌似有通项公式,然后发现貌似每次操作对通项的影响是相同的,然后发现貌似跟N没啥关系.. ...

  3. ASP.NET Core Blazor 用Inspinia静态页模板搭建简易后台(实现菜单选中)

    Blazor 是一个用于使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建丰富的交互式 UI. 共享使用 .NET 编写的服务器端和客户端应用逻辑 ...

  4. day 2 上午 挂饰 背包

    #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> us ...

  5. 【Elasticsearch 7 探索之路】(二)文档的 CRUD 和批量操作

    上一篇,我们介绍了什么是 Elasticsearch,它能做什么用以及基本概念(索引 Index.文档 Document.类型 Type)理解.这篇主要对 文档的基本 CRUD 和 倒排索引进行讲解. ...

  6. [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询

    此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper 支持.net framework4.5.1 ...

  7. Unity中用Mesh画一个圆环(二)

    中目标-生成完整面 在之前的内容中我们已经成功生成了一个面,接下来我们要生成剩下的面就很容易了. 我们把之前生成的面当作顶面,接着我们来生成底面. 还记得前面说过\(\color{#1E90FF}{D ...

  8. 201871010114-李岩松《面向对象程序设计(java)》第十一周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  9. map的线程安全问题

    为什么HashMap是线程不安全的 总说 HashMap 是线程不安全的,不安全的,不安全的,那么到底为什么它是线程不安全的呢?要回答这个问题就要先来简单了解一下 HashMap 源码中的使用的存储结 ...

  10. Java基础语法07-面向对象-多态

    抽象类 抽象方法 : 没有方法体的方法. 抽象类:被abstract所修饰的类. 抽象类的语法格式: [权限修饰符] abstract class 类名{ }[权限修饰符] abstract clas ...