1. 程式人生 > >shell檔案型別和流程控制

shell檔案型別和流程控制

我們下來看一些shell特有的:

按照檔案型別來判斷

-d 檔案 判斷該檔案是否存在,並且是否是目錄
-e 檔案 判斷該檔案是否存在
-f 檔案 判斷該檔案是否存在,並且是否為普通檔案
# 檢視該檔案是否存在
[ -e /root/install.log ]
# 檢視上一條命令執行是否成功
echo $?

# 或者,當-e命令正確執行,就不會執行yes, 當yes不執行,就會執行no
[ -e /root/install.log ] && echo yes || echo no

兩個檔案之間進行比較

檔案1 -nt檔案2 判斷檔案1的修改時間是否比檔案2的新
檔案1
-ot檔案2 判斷檔案1的修改時間是否比檔案2的舊 檔案1 -ef檔案2 判斷這兩個檔案是否為同一個檔案,用於判斷硬連結

兩個整數之間判斷

整數1 -eq 整數2 判斷整數1是否和整數2相等
整數1 -ne 整數2 判斷整數1是否和整數2不相等
整數1 -gt 整數2 判斷整數1是否大於整數2
整數1 -lt 整數2 判斷整數1是否小於整數2
整數1 -ge 整數2 判斷整數1是否大於等於整數2
整數1 -le 整數2 判斷整數1是否小於等於整數2

字串的判斷

-z 字串  ---- 判斷字串是否為空
-n 字串  ---- 判斷字串是否為非空
字串1 == 字串2 ----
判斷字串1是否和字串2相等 字串1 != 字串2 ---- 判斷字串是否和字串2不相等

多重條件判斷

判斷1 -a 判斷2  邏輯與,判斷1和判斷2都成立,為真
判斷1 -o 判斷2  邏輯或,判斷1和判斷2都成立,最終的結果就為真
!判斷           取反,使原先的判斷取反

接下來看一下if條件語句 語法:

if [ 條件判斷式1 ]
    then
    當條件判斷式1成立時,執行程式1

    elif [ 條件判斷式2 ]
    當條件判斷式2成立時,執行程式2

    else
    當所有條件不成立,執行的程式

fi

來看幾個例子 判斷登入的使用者是否為root

[root@localhost ~]# env | grep USER
USER=root
[root@localhost ~]# env | grep USER | cut -d "=" -f2
root
# env檢視環境變數,grep提取出user的那一行, cut命令將結果從"="開始分割,只提取第二部分

shell指令碼

#!/bin/bash

test=$(env | grep USER | cut -d "=" -f2)
if [ "$test" == "root" ]
    then
    echo "root root root!"
    else
    echo "no no no!"
fi

檢視根分割槽佔用情況

# df -h檢視分割槽佔用情況,grep提取出"/"根分割槽資訊, awk提取出第5列的資訊, cut將結果通過%分割, 取第一部分

[root@localhost ~]# df -h
檔案系統        容量  已用  可用 已用% 掛載點
/dev/sda3        10G  1.6G  8.5G   16% /
devtmpfs        477M     0  477M    0% /dev
tmpfs           488M     0  488M    0% /dev/shm
tmpfs           488M  7.7M  480M    2% /run
tmpfs           488M     0  488M    0% /sys/fs/cgroup
/dev/sda1       197M  102M   96M   52% /boot
tmpfs            98M     0   98M    0% /run/user/0

[root@localhost ~]# df -h | grep sda3
/dev/sda3        10G  1.6G  8.5G   16% /

[root@localhost ~]# df -h | grep sda3 | awk '{print $5}'
16%

[root@localhost ~]# df -h | grep sda3 | awk '{print $5}' | cut -d "%" -f1
16

編寫shell指令碼

#!/bin/bash
df_test=$(df -h | grep sda3 | awk '{print $5}' | cut -d "%" -f1)

if [ "$df_test" -ge "90" ];then
        echo 警告警告! /佔用已到90

elif [ "$df_test" -le "60" ];then
        echo /使用率尚未到達60
else
        echo /使用率在60-90之間,健康

fi

判斷使用者輸入的是否是目錄

#!/bin/bash

read -p "請您輸入一個路徑,來顯示是否為目錄" -t 30 read_name

if [ -d "$read_name" ];then
    echo "這是目錄"
elif [ -f "$read_name" ];then
    echo "這是一個檔案"
else
    echo "這不是一個有效路徑"

fi