shell檔案型別和流程控制
阿新 • • 發佈:2018-12-09
我們下來看一些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