1. 程式人生 > >shell判斷語法

shell判斷語法

返回 文件中 輸出 oot 個數 zabbix 正常 針對 range

shell中的邏輯判斷

if判斷格式
寫法1:if ?條件 ; then ?語句; fi

#! /bin/bash
if [ -d /usr/local/zabbix ]
then
 ? echo 123
fi

寫法2:if 條件; then 語句; else 語句; fi

#! /bin/bash
if [ -d /usr/local/zabbix ]
then
 ? echo 123
else
 ? mkdir /usr/local/zabbix
fi

寫法3:if 條件; then 語句; elif 條件; then 語句; else 語句; fi

a=4
if [ $a -gt 3 ]
then
 ? echo "<4 && >1"
elif [ $a -gt 5 ]
 ? echo "<5 && >1"
else
 ?echo "null"
fi

if判斷還支持多個條件並寫,一次判斷多個條件,如下面的格式

if [ -d /usr/local/zabbix ] && [ -f /usr/local/zabbix/1.txt ]
then
 ? mkdir /usr/local/zabbix/src
else 
 ? exit
fi

if判斷文件、目錄屬性

[ -f file ] 判斷是否是普通文件,且存在
[ -d file ] 判斷是否是目錄,且存在
[ -e file ] 判斷文件或者目錄是否存在
[ -r file ] 判斷文件是否可讀
[ -w file ] 判斷文件是否可寫
[ -x file ] 判斷文件是否可執行

判斷一個文件是否是普通文件並且存在

#! /bin/bash
# 判斷文件是否存在,若不存就創建
f="/usr/local/src/zabbix"
if [ -f $f ]
 then 
 ?echo $f is yes
 else
touch $f

判斷是否存在這個目錄,如果不存在則創建

#! /bin/bash
d="/usr/local/src/zabbix"
if [ -d $d ]
 ?then
 ? ?echo $d 
 ?else
mkdir $d

判斷文件或目錄是否存在

#! /bin/bash
# -e 不管是文件或目錄,是判斷是否存在
f="/usr/local/src/zabbix"
if [ -e $f ]
 then
 ?echo $f 
 else
mkdir $f
fi

判斷文件是否可讀,目錄可讀則可以查看目錄下文件。文件可讀則可以查看內容

#! /bin/bash
f="/usr/local/src/zabbix"
if [ -r $f ]
then
echo $f 
fi

if特殊用法

if [ -z "$a" ]  表示當變量a 的值為空時會怎麽樣
if [ -n "$a" ]  表示當變量a的值不為空
if grep -q ‘123‘ 1.txt; then 表示如果1.txt中含有‘123’的行時會怎樣
if [ ! -e file ]; then ... 表示文件不存在時會怎樣
if (($a<1)); then .. 等同於 if [ $a -lt 1 ]; then...
[ ] 中不能使用 <,>, ==, !=,>=,<=這樣的符號

if [ -n "$a" ] ?表示當變量a的值不為空

if [ -z "$a" ] ?表示當變量a 的值為空

判斷一個變量或文件不為空或存在內容

#! /bin/bash
a=4
if [ -z "$a" ]
then
 echo "no null"
else 
 ?echo "The shell a is null"
fi

判斷一個變量或文件不為空
可以用於文件判斷,如果變量不為空則執行或繼續判斷。如果文件不為空則不針對這個文件做操作或終止執行

#! /bin/bash
a=/src/1.txt
if [ -n "$a" ]
then
 echo "no null"
else 
 ?echo "touch /src/1.txt"
fi

將一條命令作為判斷條件,判斷/etc/passwd文件中是否存在root字段,如果有root字段則輸出,沒有則不輸出

#! /bin/bash
if [ -n `grep -wq "root" /etc/passwd` ]
then 
 echo "no null"
fi

grep -q 表示過濾某個文件內容的時候,不需要把結果輸出顯示出來
sh -x 執行過程
[root@localhost src]# sh -x 1.sh 
++ grep -wq root /etc/passwd
+ ‘[‘ -n ‘]‘
+ echo ‘no null‘
no null

?cace判斷

case 邏輯判斷

這個腳本的目的是讓用戶輸入一個數字,然後用這個腳本去判斷用戶輸入的數字的一個範圍

! /bin/bash
read -p " Please input a number: "n
if [ -z "$n" ] #取變量n來判斷是否為空, 為空的話,說明用戶沒有輸入數字
 then
 ?echo "Please input a number." #返回繼續提示請輸入數字內容
 exit 1 #然後退出來,返回一個數值 1
fi
-------------------------------------------
n1=`echo $n |sed ‘s/[-0-9]//g‘` #判斷輸入的是否是純數字,echo出來並替換操作,使用sed 把所有的數字[範圍0-9所有數字]替換成空, $n1這個變量就映射為空
if [ ! -z $n1 ] ?#當變量不為空時,則提示繼續輸入數字。當變量為空時繼續往下執行,表示變量中引用的是純數字
then
 echo "Please input a number." #繼續提示輸入數字
 ?exit 1 #繼續退出來,返回一個數值 1
fi
--------------------------------------------
if [ $n -lt 60 ]
then
 ? tag=1
 elif [ $n -ge 60 ] && [ $n -lt 80 ]
then
 ? tag=2
 elif [ $n -ge 80 ] && [ $n -lt 90 ]
then
 ? tag=3
elif [ $n -ge 90 ] && [ $n -le 100 ]
 then
 ? tag=4
else
 ? tag=0
fi
-----------------------------------------------------
case $tag in
 ? 1)
echo " 不及格"
;;
 ? 2)
echo "及格"
;;
 ? 3)
echo "良好"
;;
 ? 4)
echo "優秀"
;;
 ? *)
echo "The number range is 0-100."
;;
esac

腳本執行過程

+ read -p ‘ Please input a number: ‘ n
Please input a number: 90
+ ‘[‘ -z 90 ‘]‘ //判斷 90 變量是否存在
++ sed ‘s/[-0-9]//g‘ // $n1 清空
++ echo 90
+ n1= //$n1 為空
+ ‘[‘ ‘!‘ -z ‘]‘ // 判斷是否不為空,不為空說明正常,往下匹配
+ ‘[‘ 90 -lt 60 ‘]‘
+ ‘[‘ 90 -ge 60 ‘]‘
+ ‘[‘ 90 -lt 80 ‘]‘
+ ‘[‘ 90 -ge 80 ‘]‘
+ ‘[‘ 90 -lt 90 ‘]‘
+ ‘[‘ 90 -ge 90 ‘]‘
+ ‘[‘ 90 -le 100 ‘]‘
+ tag=4 //匹配到了第4個條件
+ case $tag in
+ echo $‘\344\274\230\347\247\200‘
優秀

# 執行,輸入非數字,就會提示請輸入數字
[root@123 sbin]# sh -x case.sh
+ read -p ‘ Please input a number: ‘ n
Please input a number: linux
+ ‘[‘ -z linux ‘]‘         //判斷 linux 變量是否存在
++ sed ‘s/[-0-9]//g‘        //清空$n1 所有數字
++ echo linux
+ n1=linux        //$n1不為空,所以輸入的不是數字有問題
+ ‘[‘ ‘!‘ -z linux ‘]‘
+ echo ‘Please input a number.‘
Please input a number.     //提示請輸入數字,非其他字符串
+ exit 1

shell判斷語法