文章编写了一个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"
#与运算遇假着假
#或运算遇真为真