文章編寫了一個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"
#與運算遇假着假
#或運算遇真爲真