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"

               #與運算遇假着假

               #或運算遇真爲真

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章