if心得

文章编写了一个if语句写的小脚本,脚本功能为创建一个bash脚本文件,效果如下:

第一条,条件测试:如果已经存在同名的bash脚本将会用vim进入脚本并且光标停留在最后一行

第二条,条件测试:如果已经拥有一个同名的非bash脚本的shell脚本将提示已经存在一个非bash的shell脚本并且退出,

第三条,条件测试:如果存在一个同名的非shell文件将提示已有文件存在并退出

最后如果不存在将会新建文件并且写入字符

01 #!/bin/bash

#read是交互式输入的命令,提示你需要输入什么,-p代表后面跟着提示信息,read默认为不换行输入

#用path变量获取地址信息,地址最后不以/斜线为结束

07 read -p "Enter the path to a build script:" path

#用filename变量获取文件名信息

08 read -p "Please enter the file name:" filename

#通过file判断获取到的文件是否是什么类型的文件,再用grep搜索“shell script”,将结果储存到pdsh变量中

09 pdsh=`file $path/$filename | grep -o "shell script"`

#查看获取到的文件的第一行是什么信息,如果文件不存在将会有错误信息,将错误信息发送到/etc/null丢弃掉

14 pdnr=`head -1 $path/$filename 2> /etc/null`

#第一条,条件测试:利用if判断获取到的pdsh变量中的信息是否等于“shell script”并且获取pdnr信息是否等于“#!/bin/bash”;这里使用了与运算-a,如果两个信息的字符串测试结果都为真,整个if条件测试的结果才为真

17 if [ "$pdsh" == "shell script" -a "$pdnr" == "#!/bin/bash" ] ; then

#if第一条,条件测试为真之后,vim打开获取到的文件并将光标停留在最后一行

#vim + 加号代表停在哪一行如果不输入数字将会默认是最后一行

18         vim + $path/$filename

#第一条if条件测试为假,将进行第二条,条件测试;

#第二条,条件测试:判断pdsh变量中的信息是否等于“shell script”

19  elif [ "$pdsh" == "shell script"  ] ; then

#如果第二条,条件测试结果为真,输出字符已经存在一个非bash的shell文件,并退出脚本

20         echo "Not bash file for other shell file!"

#退出脚本exit,数字1自定义

21         exit 1

#第二条if条件测试为假,将进行第三条,条件测试;

#第三条,条件测试,用cat命令查看获取到的文件是否存在,如果cat到了条件测试为真,如果没cat到条件测试为假

22 elif cat $path/$filename &> /etc/null; then

#第三条,条件测试结果为真:输出字符,文件存在并且不是shell脚本文件,并且退出脚本

23         echo "A non existing shell file!"

#退出脚本

24         exit 2

#上面所有条件测试都不为真,将执行最后的分支任务,不进行条件对比

25 else

#创建一个获取到的路径中的文件

26         touch "$path/$filename"

#输入数据到文件中

27 echo "#!/bin/bash

28 #descripton:

29 #version:

30 #autor:

#这一行代表输入时间,date时间将会直接输入进去

31 #date:`date +%F`" > $path/$filename

#最后用vim打开文件并且将光标停留在文件的最后一行

32         vim + $path/$filename

#结束if语句

33 fi

34

--------------------------------------------------------------------------

没有解释版:

7 read -p "Enter the path to a build script():" path

8 read -p "Please enter the file name:" filename

9 pdsh=`file $path/$filename | grep -o "shell script"`

10

11 echo "$path"

12 echo "$pdsh"

13

14 pdnr=`head -1 $path/$filename 2> /etc/null`

15

16 echo "$pdnr"

17 if [ "$pdsh" == "shell script" -a "$pdnr" == "#!/bin/bash" ] ; then

18         vim + $path/$filename

19  elif [ "$pdsh" == "shell script" ] ; then

20         echo "Not bash file for other shell file!"

21         exit 1

22 elif cat $path/$filename &> /etc/null; then

23         echo "A non existing shell file!"

24         exit 2

25 else

26         touch "$path/$filename"

27 echo "#!/bin/bash

28 #descripton:testing

29 #version:0.0.1

30 #autor:ke

31 #date:`date +%F`" > $path/$filename

32         vim + $path/$filename

33 fi

--------------------------------------------------------------------------------------

if格式:

单分支的if语句

if 测试条件;then

选择分支

fi

双分支的if语句

if 测试条件;then

选择分支1

else

选择分支2

fi

两个分支仅会执行其中一个。

多分支的if语句

if 条件1 ;then

分支1

elif 条件2;then

分支2

elif 条件3;then

分支3

。。。

else

分支n

fi

——————————————————————————

bash条件测试:

命令执行成功与否即为条件测试

test EXPR:比较运算的命令

[ EXPR ]:表达式两端要有空格

[[ EXPR ]]:表达式两端要有空格

比较运算:

<,>,<=,>=,==,!=

测试类型:根据比较时的操作数的类型

整型测试:整数比较

字符测试:字符串次序比较

文件测试:判断文件的存在性及属性等

注意:比较运算通常只在同一种类型间进行

整形测试:

-gt:比较整数大与的运算符

例子:[$num1 -gt $ num2]

-lt:比较整数小于的运算符

-ge:大于等于

-le:小于等于

-eq:等于等于

-ne:不等于

字符串测试:

双目操作符

>;

<:

>=:

<=;

==:

!=:

=~:模式匹配

单目操作符:

-n string:是否不空,不空则为真,空则为假

-z string:是否为空,空则为真,不空则为假

文件测试:

-a FILE:存在则为真,否则则为假

-e FILE:存在则为真,否则则为假

-f FILE:存在并且为普通文件,则为真;否则为假

-d FILE:存在并且为目录文件,则为真;否则为假

-l FILE:存在并且为符号链接文件,则为真;否则为假

-h FILE:存在并且为符号链接文件,则为真;否则为假

-b FILE:块设备

-c FILE:字符设备

-S FILE:套接字文件

-p FILE:命名管道

-s FILE:存在并且为非空文件则为真,否则为假

-r FILE:存在并且可读

-w FILE:存在并且可写

-x FILE:存在并且可执行

-N FILE:mtime先于atime

file1 -nt file2:file1的mtime新于file2则为真,否则为假

file1 -ot file2:file1的mtime旧于file2则为真,否则为假

注:条件测试的两端都要加空格否则就是错误。

正确写法:

if [ "a" == "b" -a "c" == "d" ]

错误写法:

if [ "a"=="b" -a "c"=="d" ]

#字符测试两端没有空格

if [ "a" == "b"-a"c" == "d" ]

#与运算两端没有空格

if ["a" == "b" -a "c" == "d"]

#if条件测试表达式中括号两端没有共个

#if表达式中间的中括号需要共个隔开,如:[空格-内容-空格]。

逻辑运算的写法:

在多个条件间实现逻辑运算

与:[ condition1 -a condition2 ]

condition1 && condition2 :在不能在if条件测试里面使用

或:[ condition1 -o condition2 ]

condition1 || condition2 :在不能在if条件测试里面使用

非:[ -not condition ]

! condition2 :在不能在if条件测试里面使用

在非if条件测试里面使用方法:

cat /tmp/abc && echo "rm ok" || echo "rm faild"

#与运算遇假着假

#或运算遇真为真

时间: 2024-10-12 12:58:35

if心得的相关文章

Delphi组件indy 10中IdTCPServer修正及SSL使用心得

indy 10终于随着Delphi2005发布了,不过indy套件在我的印象中总是复杂并且BUG不断,说实话,不是看在他一整套组件的面子上,我还是喜欢VCL原生的Socket组件,简洁,清晰.Indy9发展到了indy10几乎完全不兼容,可叹啊.言归正传.在使用IdTCPServer组件的时候发现了他的漏洞,他的OnConnec,OnExecute,OnDisconnect等事件是在其他线程中执行的,通常情况下这没有问题,但是在特殊的情况下会造成问题,如果其他部分的程序写得有问题就会出现漏洞.

Linux系统理解以及Linux系统学习心得

原创作品转载请注明出处  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 作者:严哲璟 说一下我对Linux系统的理解 1.加载Linux内核准备:在加载基本输入输出模块(BIOS)之后,从磁盘的引导扇区读入操作系统的代码文件块到内存中,之后开始整个系统的初始化. 2.main.c的start_kernel函数是整个操作系统的入口,这也与Linux是基于C语言的特性相符,start_kernel具体做的动作很多

参加老男孩linux培训心得

参加老男孩linux培训心得 时间如白驹过隙,已经不知不觉来到老男孩培训已经三个月了.在这三个月中我渐渐得到了成长,专业技术成长,以及为人处事之道与思想的提高. 我一共就总结以下了三点     一.思想 在我刚来老男孩的时候,老师天天上课前讲一段思想,我当时不太明白,不赶紧上课,讲这干啥呢?而且老师早一点讲完,又可以招下一批学生了,老讲思想,这不是自断财路么?随着时间的流逝,渐渐的我悟懂了点.人在那里都可以学技术,但是学会了技术没有思想,一旦来了新事物,就会接受的很慢.尤其在互联网这个圈子里,软

Linux串口IO模式的一些心得

众所周知,在Linux系统下所有设备都是以文件的形式存在,串口也一样. 通常I/O操作都是有阻塞与非阻塞的两种方式. 其中"超时"这个概念其实是阻塞中的一种处理手段,本质还是属于阻塞的I/O模式. 在Linux中串口的IO操作 本文将它分为三种状态: 阻塞状态 超时状态 非阻塞状态 这三种状态的转换组合有这么几种: 阻塞 --> 超时 阻塞 --> 非阻塞 超时 --> 阻塞 超时 --> 非阻塞 非阻塞 --> 阻塞 我们一个一个来分析 首先在一个串口的

我的MYSQL学习心得(八)

我的MYSQL学习心得(八) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 这一篇<我的MYSQL学习心得(七)>将会讲解MYSQL的插入.更新和删除语句 同样的,只会讲解跟SQLSERVER不同的地方 插入 将多行查询结果插入到表中 语法 INSERT INTO table_name1(column_list1) SELECT (

《不要让我思考》读后心得2

---内容开始--- Don't let me think! 这本书以网站可用性为目的,从作者自身工作和经验角度,站在用户的心理立场上,介绍了作为设计者如何做出可用性的web设计. 其中包含的内容有: 1.别让我思考(定律) 当看到一个不需要思考的网站时: 当看到一个要思考的网站时: @创建一个网站时,要去掉这些问号. 有时候网站会强迫我们思考,名字,常见的罪魁祸首就是改成自以为很酷很聪明的,带有营销色彩的名字. 还有另一个来源是看起来不太明显的链接和按钮,会造成用户犹豫可不可点. @类似的例子

【管理心得之二十二】小人物 仰视 大授权

场景再现====================Boss:小王,来我办公室一下.小王: 嗯Boss:近期总公司有会,需要到外地出差几日.我不在的这段期间里,公司大小事务你帮忙处理一下.          如果有什么难决定的事,第一时间电话.邮件联系我商定即可.小王:  明白.放心吧领导,绝不会让你失望的Boss:嗯,那就好,没事了. {小王走出办公室} 心中暗喜,"难道这就是传说中的授权,Boss不在的时候,我岂不是最高权力的行使者." ==================== 从场景

python 爬虫抓取心得

quanwei9958 转自 python 爬虫抓取心得分享 urllib.quote('要编码的字符串') 如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用: urllib.quote('要编码的字符串') query = urllib.quote(singername) url = 'http://music.baidu.com/search?key='+query response = urllib.urlopen(url) text = response.read()

Android APP架构心得

前言 从JavaEE转到Android开发也2年多了,开发的项目也有4,5个了(公司项目),其中有3个项目前期都是自己独立开发,从一开始的毫无架构到现在对如何架构也有一点心得,所以在此分享出来,大家一起交流 什么是架构 在我看来,软件架构绝对不只是框架的堆砌,看我看来,架构是为了方便软件维护.扩展.安全性.切入性(我也不知道有没有人提出过这个关键字,因为的确很少看见,简单来说我这里说的切入性就是指一个以前没有接触过这个项目的人,能快速加入到这个项目中,对项目进行维护.修改和扩展) 维护性 一个好

java多线程心得

多并发的时候,在什么情况下必须加锁?如果不加锁会产生什么样的后果. 加锁的场景跟java的new thread和Runnable的关系是什么? 看看java的concurrentMap源码. 还有spring 的web.xml启动执行源码 spring aop http://www.cnblogs.com/FDROSE1001/p/3661895.html activemq的本质是什么? java的jms hibernate由配置文件映射到实体类的本质是什么? java反射 spring aop