文章编写了一个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"

               #与运算遇假着假

               #或运算遇真为真