Linux-Shell脚本编程-学习-6-Shell编程-使用结构化命令-文件比较-case编程
这一片主要说test文件的比较,文件比较在日常使用的频率比较高,这里重点把每个部分都试着说说看
1. 检车目录 -d
-d测试会检查指定的文件名是否在系统上以目录的形式存在,当我们要写文件到某个目录之前,或者是将文件放置到某个目录位置的时候,就需要使用-d来检测这个目录是否存在
#!/bin/bash #look before you leap if [ -d $HOME ]
then
echo " your Home directory exists"
cd $HOME
ls -a
else
echo " there is a problem with your HOME directory"
fi运行截图,代码的意思就是要检测HOME这个目录是否存在,如果这个目录存在就切换到这个目录,并且执行 ls -a命令,输出HOme目录下的所有文件
2. 检查对象是否存在 -e
-e比较允许你在脚本中使用对象前检查文件或者目录是否寻再
#!/bin/bash #chesking if a directory exists if [ -e $HOME ]
then
echo "ok,on the directory.now to check the file"
if [ -e $HOME/testing ]
then
echo "addending date to existing file"
date >> $HOME/testing
else
echo "create a file"
date > $HOME/testing
fi
else
echo "sorry you do not have a Home directory"
fi这段代码的意思就是先要检测HOME文件是否存在,如果存在,那么就检测testing文件是否存在,如果存在就吧date的数据追加写到testing文件中,如果testing文件补充存在就创建testing文件,并把date数据写入到文件中
3. 检查文件 -f
确定指定的对象是个文件 -f,区分一个文件名是目录还是文件,需要使用 -f
#!/bin/bash #cheak if a file if [ -e $HOME ]
then
echo "the object exists,is it a file?"
if [ -f $HOME ]
then
echo " yes it is a file"
else
echo " no if is not a file"
if [ -f $HOME/.bash_history ]
then
echo " but this is a file"
else
echo "this is not a file too"
fi
fi
else
echo "sorry the object dose not exists"
fi exit 0这段代码的意思就是首先检查HOME目录是否存在,如果存在,则判断home是不是一个文件,如果是就是输出这是一个文件,如果不是,就输出这不是一个文件,并且判断home下的bash_history是不是一个文件,如果是就输出是,如果不是就输出不是,最后如果HOME文件不存在,这直接执行最后一段代码,输出这个对象不存在。
4. 检查文件是否可读 -r
当我在尝试从文件中读取数据是,最好先判断一下该文件是否可读。
#!/bin/bash #testing if you can read a file pwfile=/etc/shadow if [ -f $pwfile ];then
if [ -r $pwfile ];then
tail $pwfile
else
echo " sorry o am unable to read the $pwfile"
fi
else
echo " sorry $pwfile is not a file "
fi/etc/shadow文件还有系统用户加密后的密码,所以他对系统上的普通用户是不可读的
5.检查空文件-s
当我们要删除一个文件的时候,有时候需要查看这个文件是否是一个空文件,不过这里要注意的是,-s检测到文件是控空文件的时候返回的退出码是1
#!/bin/bash #testing if a file is empty file=testfile
touch $file if [ -s $file ];then
echo "the $file file exists and has date in"
else
echo "the $file exists and is empty"
fi
date > $file
if [ -s $file ];then
echo "the $file file exists and has date in"
else
echo "the $file exists and is empty"
fi
</pre></p></blockquote></p><p></p><p>6. 检查文件是否可写 -w</p><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><p></p><p>判断是是否对该文件有写权限</p><p><pre name="code" class="plain">#!/bin/bash #check if a file is writeable logfile=$HOME/logtest
touch $logfile chmod u-w $logfile new=`date +%y%m%d-%H%M` if [ -w $logfile ];then
echo "the program ran at : $logfile" > $logfile
echo "the first attempt succeeded"
else
echo "the first attempt failes"
fi
chmod u+w $logfile if [ -w $logfile ];then
echo "the program ran at : $logfile" > $logfile
echo "the second attempt succeeded"
else
echo "the second attempt failes"
fi
7.检查文件是否可执行 -x
-x比较是一个渐变的判断一个特定文件是否有可执行的权限的方法。
#!/bin/bash #testing file execution if [ -x shelltest2.sh ];then
echo " you can run the script:"
./shelltest2.sh
else
echo " you are unable to execute the script"
fi
8. 检查文件所属关系 -O
-O比较允许你轻松的测试你是否是文件属主
#!/bin/bash #check file ownership if [ -O /etc/passwd ];then
echo " yao are the file owner"
else
echo " you are not file owner"
fi
9. 检查默认属组关系
#!/bin/bash #check file group test if [ -G $HOME/shellcode/testfile ];then
echo " yao are in the same grouup"
else
echo " the file is not owned by tour group"fi
10. 检查文件日期
#!/bin/bash #test file dates if [ $HOME/shellcode/testfile -nt $HOME/shellcode/testfile1 ];then
echo " testfile new than testfile1"
else
echo " testfile1 new than testfile"
fi
到这里,文件的test就基本介绍完了,后面的讲继续介绍
还有一部分这里就不做详细解释,大家可以自行百度学习一下
1. 复合条件测试
【】&&【】
【】||【】
2. if-then高级特性
((expression))
【【expression】】
3. case命令
case variable in
pattern1 | pattern2) commands1;;
pattern3)commands2;;
*) default commands;;
Linux-Shell脚本编程-学习-6-Shell编程-使用结构化命令-文件比较-case编程的更多相关文章
- 《Linux命令行与shell脚本编程大全》第十二章 使用结构化命令
许多程序要就对shell脚本中的命令施加一些逻辑控制流程. 结构化命令允许你改变程序执行的顺序.不一定是依次进行的 12.1 使用if-then语句 如下格式: if command then ...
- 详细介绍Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- Linux shell脚本全面学习
Linux shell脚本全面学习 1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它 ...
- Linux shell脚本基础学习详细介绍(完整版)二
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- Shell脚本基础学习
Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...
- Shell脚本的学习(二)
Shell脚本的学习(二) 方法: 1) 一个计算器: 2)递归实现打印目录 3)方法调用
- Shell脚本的学习(一)
Shell脚本的学习(一) 一)代码式shell脚本简介 1.下载 Xshell 5 建一个文件夹 mkdri home/data ; 1)查看一个在data里建一个1.sh 查看是否建立成功. 2) ...
- linux shell脚本使用结构化命令
内容: 一.if-then命令 二.if-then-else命令 三.test命令 四.case命令 1.if-then结构化命令中最基本的类型,其格式如下: if command then comm ...
随机推荐
- Ubuntu 16.04 源码方式安装 JDK
1.去官网下载JDK http://www.oracle.com/technetwork/articles/javase/index-jsp-138363.html 2.下载完成后,创建一个我们将要安 ...
- 写在归程路上——2018ROBOCUP机器人世界杯中国赛
写入自强队名单一年,认识Daniel十个月,第二次代表上海大学参加国赛,这一次是在浙江绍兴.坐在返沪的车上,心里担心着作业和明天的早课,写这篇博文来打发打发时间. ROBOCUP两个半比赛日,项目主要 ...
- 【洛谷P1774】最接近神的人
最接近神的人_NOI导刊2010提高(02) 用类似于桶的方法,树状数组记录原序列的某位置之前已经插入了多少个数, 插入时树状数组单点加1即可 先排一遍序,从大到小插入所有数在原序列的位置, 统计每次 ...
- MVC5 数据注解和验证
①利用数据注解进行验证 ②创建自定义的验证逻辑 ③模型元数据注解的用法 ①先创建数据源 1,创建我们的Model Order 2,创建控制器带EF 选择模型为Order 当你运行的时候会报错,需要代 ...
- java的引用总结
四种引用:强弱软虚 强引用:使用强引用,在内存不足的时候垃圾处理器也不会回收他,哪怕导致程序崩溃 例如: A a=new A() 软引用:内存不足的时候会被回收(软引用可以和一个引用队列(Refere ...
- vue webpack 懒加载
自己项目中的写法 const router = new Router({ routes: [ { path: '/index', component: (resolve) => { requir ...
- HDU1159(LCS)
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> us ...
- Linux入门-第五周
1.磁盘lvm管理,完成下面要求,并写出详细过程: 1) 创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小 为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv; ...
- Linux系统文件和目录的属性及权限
1 文件属性概述 Linux系统中的文件或目录的属性主要包括:索引节点(inode).文件类型.权限属性.硬链接数.所归属的用户和用户组.最近修改时间等内容(文件名严格来说不属于文件的属性): 下面是 ...
- MySQL数据库查看数据表占用空间大小和记录数
MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHE ...