Shell基礎(五) 條件判斷與流程控制

2021-07-10 10:53:24 字數 4221 閱讀 2045

格式:test  [選項]  file    

或者    [(空格)條件判斷式(空格)]         注:不要忘記空格

選項:-d:判斷檔案是否存在,且是目錄檔案時為真

-e:判斷檔案是否存在,存在時為真

-f:判斷檔案是否為真,且為普通檔案時為真

-b:判斷檔案是否存在,且為塊裝置檔案時為真

-c:判斷檔案是否存在,且為字元裝置時為真

-p:判斷檔案是否存在,且為管道檔案時為真

-s:判斷檔案是否為非空,非空時為真

-s:判斷套接字檔案是否存在,存在時為真

例:[-e  filename]   執行命令後echo  $?檢視若值為0說明執行正確,檔案存在

[-e  filename]  &&  echo  yes  ||  echo no

-r:擁有讀許可權時為真

-w:擁有寫許可權時為真

-x:擁有執行許可權時為真

-u:  有suid許可權時為真

-g:有sgid許可權時為真

-k:有sbit許可權時為真

檔案1  -nt  檔案2           判斷檔案1是否比檔案2新,若新則為真

檔案1  -ot  檔案2           判斷檔案1是否比檔案2舊,若舊則為真

檔案1  -ef  檔案2           判斷檔案1inode節點號是否和檔案2相同,(可用此判斷硬鏈結)

整數1  -eq  整數2          判斷是否相等

整數1  -ne  整數2          判斷是否不相等

整數1  -gt  整數2           判斷是否大於

整數1  -ge  整數2           判斷是否大於等於

整數1  -lt  整數2             判斷是否小於

整數1  -le  整數2            判斷是否小於等於

-z  字串                       判斷字串是否為空

-n  字串                       判斷字串是否為非空

字串1  ==  字串2      判斷是否相等

字串1  !=   字串2       判斷是否不等

例:[  -z  "$name"]  $$  echo yes  ||  echo no

判斷1  -a  判斷2               邏輯與,1和2都為真最終結果才為真

判斷1  -o  判斷2               邏輯或,1和2有乙個為真結果就為真

!判斷                              邏輯非

if  [ 條件判斷式 ];then 程式

fi或者:if  [ 條件判斷式 ]

then 程式

fi例程:判斷當前使用者是root

#!/bin/bash

test=$(env | grep user | cut -d ":" -f2)

if ["$test" == "root"]

then

echo current user is root

fi

例程:判斷分割槽使用率

#!/bin/bash

test=$(df -h | grep /dev/sda5 | awk '' | cut -d "%" -f1)

if [ $test -ge 80 ]

then

echo "sda5 is full"

fi

if [ 條件判斷語句 ]

then

程式else

程式fi

例程:判斷手動輸入的是不是目錄檔案

#! /bin/bash

read -t 30 -p "please input num1:" num1

read -t 30 -p "please input num2:" num2

read -t 30 -p "please input operate:" ope

if [ -n "$num1" -a -n "$num2" -a -n "$ope" ]

then

test1=$(echo "$num1" | sed 's/[0-9]//g')

test2=$(echo "$num2" | sed 's/[0-9]//g')

if [ -z "$test1" -a -z "$test2" ]

then

if [ "$ope" == '+' ]

then

ans=$(($num1 + $num2))

elif [ "$ope" == '-' ]

then

ans=$(($num1 - $num2))

elif [ "$ope" == '*' ]

then

ans=$(($num1 * $num2))

elif [ "$ope" == '/' ]

then

ans=$(($num1 / $num2))

else

echo "error: input operate wrong"

exit 9

fielse

echo "error: input is not a num"

exit 10

fielse

echo "error: input num is null"

exit 11

fiecho "$num1" "$ope" "$num2" = $ans"

3、多分支case語句

case $變數名 in

「值1」)

若等於值1,程式

;;「值2」)

若等於值2,程式

;;*)

若都不等於,程式

;;esac

4、for迴圈

語法一:

for   變數名   in  值1  值2  值3  ... do

程式done

語法二:

for  ((初始值;迴圈控制條件;變數變化)) do

程式done

例程:批量解壓縮檔案

#!/bin/bash

ls *.tar.gz > tar.log

for i in $(cat tar.log)

dotar -zxf $i &> /dev/null

done

rm -rf tar.log

例程:1加到100
#!/bin/bash

s=0for ((i=1;i<=100;i=i+1))

dos=$(($s+$i))

done

echo "$s"

例程:批量新增使用者

#!/bin/bash

read -t 30 -p "please input user name" name

read -t 30 -p "please input the numbers of users" num

read -t 30 -p "please input user passwd" pass

if [ -n "$name" -a -n "$num" -a -n "$pass" ]

then

y=$( echo $num | sed 's/[0-9]'//g )

if [ -z $y ]

then

for ((i=1;i<=$num;i=i+1))

do/user/sbin/useradd $name$i $>/dev/null

echo $pass | /user/bin/passwd --stdin $name$i $>/dev/null

done

fifi

例程:批量刪除普通使用者

#!/bin/bash

for i in $(cat /etc/passwd | grep /bin/bash | grep -v root)

douserdel $i

done

5、while迴圈

語法:

while  [ 條件判斷式 ] do

程式 done

6、until迴圈

語法:是在條件不成立時執行

until  [ 條件判斷式 ] do

程式done

shell程式設計(五)條件判斷

這裡所說的條件判斷是對變數的大小 字串 檔案屬性等內容進行判斷。test命令可以用於字串 數字 檔案狀態等內容的測試。指的是對檔案的許可權 有無 屬性 型別等內容進行判斷。與其他語言不同的是,test命令的測試結果,返回0時表示測試成功。返回1時表示測試失敗。指的是比較兩個數值的大小或相等關係,相當...

Shell指令碼(六) 條件判斷

1 基本語法 condition 注意 condition 前後要有空格 注意 條件非空即為true,atguigu 返回true,返回false。2.常用判斷條件 1 兩個整數之間比較 字串比較 lt 小於 less than le 小於等於 less equal eq 等於 equal gt 大...

python學習筆記(五) 條件判斷

計算機之所以能做很多自動化的任務,因為它可以自己做條件判斷。比如,輸入使用者年齡,根據年齡列印不同的內容,在python程式中,用if語句實現 age 20if age 18 print your age is age print adult 根據python的縮排規則,如果if語句判斷是true,...