2023年3月28日 星期二

Shell scipt的判斷式

目錄
Debug
讀取輸入
取得執行shell時的參數當變數
if / else / else if 寫法
IF 雙判斷式
用正規化和萬用字元做模糊判斷
判斷是否是檔案
檔案判斷
字串比較
數字比較
Ref

Debug


set –x 把變數的值顯示出來,看是否如預期
set –v 這樣會先把還沒處理過的程式馬秀出來
set –xv 顯示更多的資訊。



讀取輸入


#!/bin/bash
echo -n "pls input a number:"
read UR_NUM
echo "the number is $UR_NUM"

echo -e : 代表輸出時不要換行

取得執行shell時的參數當變數


#!/bin/sh
#$1 代表在執行 shell 時帶的第一個參數
if [ "$1" = "123" ] #字串的比較
then
    echo "var is 123"
fi


if / else / else if 寫法


#!/bin/sh
VAR1=1
if [ $VAR1 = 123 ] #數字的比較
then
    echo "var is 123"
elif [ $VAR1 = 456 ]
then
    echo "var is 456"
else
    echo "var is 789"
fi


IF 雙判斷式


if [ 條件判斷式一 ] &&  [ 條件判斷式二 ] 
then
     陳述句一
fi


用正規化和萬用字元做模糊判斷


  • 正規化的判斷式(=~),所以這個判斷式要使用雙中括號包起來
  • 含有萬用字元(*)的那個字串不可以用雙引號圍住,否則就會判斷錯誤
#!/bin/bash
echo -n "你好!請輸入一個單字:"
read MY_WORD

if [ "$MY_WORD" == "Pajace2001" ]; then
        echo "你輸入的不是 Pajace2001 "
elif [ "$MY_WORD" == "Pajace9527" ]; then
        echo "你輸入的是 Pajace9527"
elif [[ $MY_WORD == Pajace* ]]; then
        echo "你輸入的是 Pajace 開頭的字 - $MY_WORD "
elif [[ $MY_WORD =~ Pajace ]]; then
        echo "你輸入的是含有 Pajace 字 - $MY_WORD "
else
        echo "你輸入的是 $MY_WORD "
fi


判斷是否是檔案


#!/bin/sh

if [ -f "/home/phpini/testfile" ]
then
    echo "/home/phpini/testfile is a file"
else
    echo "/home/phpini/testfile is not a file"
fi


檔案判斷


判斷式說明

-d filefile 是目錄傳回 ture

-f filefile 是檔案傳回 ture

-r filefile 可以讀傳回 ture

-s filefile 儲存容量大於 0 傳回 ture

-w filefile 可以寫入傳回 ture

-x filefile 可以執行傳回 ture

-L filefile 為軟連結傳回 ture

file1 -nt file2file1 比 file2 新傳回 ture

file1 -ot file2file1 比 file2 舊傳回 ture

file1 -ef file2file1 與 file2 為同一檔案傳回 ture


字串比較


判斷式說明

$str1 = $str2$str1 與 $str2 字串是否相同

$str1 == $str2$str1 與 $str2 字串是否相同

$str1 != $str2$str1 與 $str2 字串是否不相同

-n $str當字串有值不是 null 回傳 true

-z $str當字串沒值是 null 回傳 true


數字比較


判斷式說明

var1 -eq var2var1 等於 var2 回傳 true

var1 -ne var2 var1var1 不等於 var2 回傳 true

var1 -gt var2var1 大過 var2 回傳 true

var1 -ge var2var1 大過或等如 var2 回傳 true

var1 -lt var2var1 小過 var2 回傳 true

var1 -le var2var1 小過或等如 var2 回傳 true


Ref


1
2

沒有留言:

張貼留言