Shell編程條件測(cè)試的實(shí)現(xiàn)
什么是Shell
Shell是一個(gè)命令解釋器,它會(huì)解釋并執(zhí)行命令行提示符下輸入的命令。除此之外,Shell還有另一個(gè)功能,如果要執(zhí)行多條命令,它可以將這組命令存放在一個(gè)文件中,然后可以像執(zhí)行Linux系統(tǒng)提供的其他程序一樣執(zhí)行這個(gè)文件,這個(gè)命令文件就叫做Shell程序或者Shell腳本。當(dāng)運(yùn)行這個(gè)文件時(shí),它會(huì)像在命令行輸入這些命令一樣順序地執(zhí)行它們。
Shell腳本支持變量、命令行參數(shù)、交互式輸入、函數(shù)模塊、各種控制語句等高級(jí)編程語言的特性,如if、case、while和for等。利用Shell程序設(shè)計(jì)語言可以編寫出功能非常復(fù)雜的腳本程序,把大量的任務(wù)自動(dòng)化,尤其是那些需要輸入大量命令而在執(zhí)行過程中不太需要與用戶進(jìn)行干預(yù)的系統(tǒng)管理任務(wù)。
為了讓Shell能讀取并且執(zhí)行Shell程序,Shell腳本的文件權(quán)限必須被設(shè)置為可讀和可執(zhí)行。為了讓Shell可以找到程序,可以選擇輸入完全路徑名,或者將這個(gè)腳本的路徑放在PATH環(huán)境變量指定的路徑列表中。Shell腳本不是復(fù)雜的程序,它是由上往下逐行解釋執(zhí)行的。腳本的第一行總是以“#!<Shell解釋器文件路徑>”開始,用來指定該腳本是使用那種Shell進(jìn)行解釋執(zhí)行。
編寫Shell腳本
1)使用VI或者其他任意的文本編輯工具創(chuàng)建一個(gè)名為HelloWorld.sh的文件,并在其中加入以下內(nèi)容:
[root@localhost ~]# vi HelloWorld.sh #!/bin/bash #The first Shell script echo "Hello World!"
2)為HelloWorld.sh文件添加執(zhí)行權(quán)限;
[root@localhost ~]# chmod +x HelloWorld.sh
3)運(yùn)行HelloWorld.sh腳本,查看運(yùn)行結(jié)果;
[root@localhost ~]# ./HelloWorld.sh Hello World!
條件測(cè)試 | 數(shù)值測(cè)試
編寫Shell腳本時(shí),有時(shí)要先測(cè)試字符串是否一致、數(shù)字是否相等或者檢查文件狀態(tài),基于這些測(cè)試的結(jié)果再做下一步的操作。Shell腳本的條件測(cè)試可以用于測(cè)試字符串、文件狀態(tài)和數(shù)字。
測(cè)試完成后可以通過“$?”獲取測(cè)試的結(jié)果,其中0為正確,1為錯(cuò)誤。
數(shù)值測(cè)試用于對(duì)兩個(gè)數(shù)值進(jìn)行比較并得出判斷結(jié)果,包括:等于、不等于、大于、大于等于、小于、小于等于。
數(shù)值判斷的格式:[ 數(shù)值1 關(guān)系運(yùn)算符 數(shù)值2 ]
方括號(hào)與條件之間必須要有空格。
數(shù)值測(cè)試的關(guān)系運(yùn)算符 | |
關(guān)系運(yùn)算符 | 說明 |
-eq? | 兩個(gè)數(shù)值相等 |
-ne | 兩個(gè)數(shù)值不相等 |
-gt | 第一個(gè)數(shù)大于第二個(gè)數(shù) |
-lt | 第一個(gè)數(shù)小于第二個(gè)數(shù) |
-ge | 第一個(gè)數(shù)大于等于第二個(gè)數(shù) |
-le | 第一個(gè)數(shù)小于等于第二個(gè)數(shù) |
測(cè)試兩個(gè)數(shù)值是否相等;
[root@localhost ~]# [ 1024 -eq 1024 ] //測(cè)試1024是否等于1024 [root@localhost ~]# echo $? 0 //兩個(gè)數(shù)值相等 修改第一個(gè)數(shù)值為1124后再次進(jìn)行測(cè)試。 [root@localhost ~]# [ 1124 -eq 1024 ] [root@localhost ~]# echo $? 1 //兩個(gè)數(shù)值不相等 [root@localhost ~]# number1=500 //number1為500 [root@localhost ~]# number2=254 //number2為254 [root@localhost ~]# [ $number1 -gt $number2 ] [root@localhost ~]# echo $? 0 //number1大于number2 [root@localhost ~]#
條件測(cè)試 | 字符串測(cè)試
字符串測(cè)試可以對(duì)兩個(gè)字符串的值進(jìn)行比較,也可以測(cè)試單個(gè)字符串的值是否為空或者非空。
字符串測(cè)試的格式:[ 關(guān)系運(yùn)算符 字符串 ]或者[ 字符串1 關(guān)系運(yùn)算符 字符串2 ]
字符串測(cè)試的關(guān)系運(yùn)算符 | |
關(guān)系運(yùn)算符 | 說明 |
= | 兩個(gè)字符串相等 |
!= | 兩個(gè)字符串不相等 |
-z | 字符串為空 |
-n |
字符串不為空 |
要測(cè)試兩個(gè)字符串是否相等 [root@localhost ~]# [ "abc" = "abc" ] [root@localhost ~]# echo $? 0 //兩個(gè)字符串相等 把第一個(gè)字符串更改為bac后進(jìn)行測(cè)試 [root@localhost ~]# [ "bac" = "abc" ] [root@localhost ~]# echo $? 1 //兩個(gè)字符串不相等 如果把運(yùn)算符改為“!=” [root@localhost ~]# [ "bac" != "abc" ] [root@localhost ~]# echo $? 0 判斷環(huán)境變量是否為空或者非空 [root@localhost ~]# [ -z $python1 ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ -n $python1 ] [root@localhost ~]# echo $? 0 //python1變量為空 [root@localhost ~]# python1="test" //對(duì)python1變量進(jìn)行賦值 [root@localhost ~]# [ -z $python1 ] [root@localhost ~]# echo $? 1 //python1變量不為空 [root@localhost ~]#
條件測(cè)試 | 文件狀態(tài)測(cè)試
Linux的Shell腳本支持對(duì)文件狀態(tài)的檢測(cè),包括檢測(cè)文件的類型、文件的權(quán)限和文件的長度等;
文件狀態(tài)測(cè)試的格式:[ 關(guān)系運(yùn)算符 字符串 ]
文件狀態(tài)測(cè)試的關(guān)系運(yùn)算符 | |
關(guān)系運(yùn)算符 | 說明 |
-d | 目錄 |
-f | 一般文件 |
-L | 鏈接文件 |
-r |
可讀 |
-w | 可寫 |
-x | 可執(zhí)行 |
-u | 設(shè)置了suid |
-s | 文件長度大于0、非空 |
[root@localhost 20190105]# ll 總用量 4 -rwxr-xr-x. 1 root root 56 6月 4 07:55 HelloWorld.sh [root@localhost 20190105]# [ -r HelloWorld.sh ] [root@localhost 20190105]# echo $? 0 //HelloWorld.sh 文件可讀 [root@localhost 20190105]# [ -w HelloWorld.sh ] [root@localhost 20190105]# echo $? 0 //HelloWorld.sh 文件可寫 [root@localhost 20190105]# [ -x HelloWorld.sh ] [root@localhost 20190105]# echo $? 0 //HelloWorld.sh 文件可執(zhí)行 [root@localhost 20190105]#
條件測(cè)試的邏輯操作符
邏輯操作符分以下3種:
- -a:邏輯與,只有當(dāng)操作符兩邊的條件均為真時(shí),結(jié)果為真,否則為假。
- -o:邏輯或,操作符兩邊的條件只要有一個(gè)為真,結(jié)果為真,只有當(dāng)兩邊所有條件為假時(shí),結(jié)果為假。
- !:邏輯否,條件為假,結(jié)果為真。
如果要測(cè)試兩個(gè)文件的狀態(tài) [root@localhost 20190105]# ll test1 test2 -rw-rw-r--. 1 root root 0 6月 4 09:25 test1 -rw-rw-r--. 1 root root 0 6月 4 09:25 test2 [root@localhost 20190105]# [ -r test1 -a -r test2 ] //測(cè)試文件 test1 和 test2 是否都可讀 [root@localhost 20190105]# echo $? 0 [root@localhost 20190105]# [ -x test1 -o -x test2 ] //測(cè)試文件 test1 和 test2 是否至少有一個(gè)可執(zhí)行 [root@localhost 20190105]# echo $? 1 如果要測(cè)試兩個(gè)數(shù)值變量 [root@localhost 20190105]# number1=10 [root@localhost 20190105]# number2=20 [root@localhost 20190105]# [ $number1 -eq 10 -a $number2 -gt 20 ] //測(cè)試是否number1 大于10 且 number2 大于20 [root@localhost 20190105]# echo $? 1 如果要測(cè)試文件test1 是否為不可讀 [root@localhost 20190105]# ls -l test1 -rw-rw-r--. 1 root root 0 6月 4 09:25 test1 [root@localhost 20190105]# [ ! -r test1 ] //測(cè)試文件test1 是否為不可讀 [root@localhost 20190105]# echo $? 1 [root@localhost 20190105]#
到此這篇關(guān)于Shell編程條件測(cè)試的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Shell 條件測(cè)試 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux shell實(shí)現(xiàn)求一個(gè)多維數(shù)組中的最大和最小值
這篇文章主要介紹了linux shell實(shí)現(xiàn)求一個(gè)多維數(shù)組中的最大和最小值,需要的朋友可以參考下2016-08-08shell 中數(shù)學(xué)計(jì)算總結(jié)
shell中的賦值和操作默認(rèn)都是字符串處理,在此記下shell中進(jìn)行數(shù)學(xué)運(yùn)算的幾個(gè)特殊方法,以后用到的時(shí)候可以來看,呵呵2012-09-09