前言
首先在Shell中,括號(hào)表示條件測(cè)試方法玉罐。主要用在if-then姐直、case等需要條件判斷的語(yǔ)句結(jié)構(gòu)中。
最近在看bash圆米,括號(hào)搞的我一頭霧水卒暂,所以總結(jié)一下,理清思路娄帖!
括號(hào)
- 括號(hào)一般在命令替換的時(shí)候使用也祠。
#!/bin/bash
today=$(date +%y%m%d)
touch log.$today
雙括號(hào)
- 使用雙括號(hào),在比較過程中使用高級(jí)數(shù)學(xué)表達(dá)式
符號(hào) | 描述 | |
---|---|---|
val++ | 后增 | |
val-- | 后減 | |
++val | 先增 | |
--val | 先減 | |
近速! | 邏輯求反 | |
~ | 位求反 | |
** | 冪求反 | |
<< | 左位移 | |
>> | 右位移 | |
&& | 邏輯和 | |
邏輯或 |
$ cat test23.sh
#!/bin/bash
val1=10
if(( $val1 ** 2 > 90 ))
then
((val2 = $val1 ** 2))
echo "The square of $val1 is $val2"
fi
# seal @ bogon in ~/Desktop/Shell [16:48:19]
$ ./test23.sh
The square of 10 is 100
- 注意诈嘿,不需要將雙括號(hào)中表達(dá)式里的大于號(hào)轉(zhuǎn)義。這是雙括號(hào)命令提供的另一個(gè)高級(jí)特性削葱。
方括號(hào)
方括號(hào)定義了測(cè)試條件奖亚。
第一個(gè)方括號(hào)后和第二個(gè)方括號(hào)前都要加一個(gè)空格,否則會(huì)報(bào)錯(cuò)析砸。
-
方括號(hào)主要包括4類判斷:
- 數(shù)值比較
比較 描述 n1 -eq n2 檢查n1是否與n2相等 n1 -ge n2 檢查n1是否大于或等于n2 n1 -gt n2 檢查n1是否大于n2 n1 -le n2 檢查n1是否小于或等于n2 n1 -lt n2 檢查n1是否小于n2 n1 -ne n2 檢查n1是否不等于n2 #!/bin/bash # Using numeric test evaluations value1=10 value2=11 # if [ $value1 -gt 5 ] then echo "The test value $value1 is greater than 5" fi # if [ $value1 -eq $value2 ] then echo "The values are equal" else echo "The values are different" fi #
- 字符串比較
比較 描述 str1 = str2 檢查str1是否和str2相同 str1 != str2 檢查str1是否和str2不同 str1 < str2 檢查str1是否比str2小 str1 > str2 檢查str1是否比str2大 -n str1 檢查str1的長(zhǎng)度是否非0 -z str1 檢查str1的長(zhǎng)度是否為0 $ cat test8.sh #!/bin/bash # testing string equality testuser=baduser # if [ $USER != $testuser ] then echo "This is not $testuser" else echo "Welcome $testuser" fi $ $ ./test8.sh This is not baduser
- 文件比較
比較 描述 -d file 檢查file是否存在并是一個(gè)目錄 -e file 檢查file是否存在 -f file 檢查file是否存在并是一個(gè)文件 -r file 檢查file是否存在并可讀 -s file 檢查file是否存在并非空 -w file 檢查file是否存在并可寫 -x file 檢查file是否存在并可執(zhí)行 -O file 檢查file是否存在并屬當(dāng)前用戶所有 -G file 檢查file是否存在并且默認(rèn)組與當(dāng)前用戶相同 file1 -nt file2 檢查file1是否比file2新 file1 -ot file2 檢查file1是否比file2舊 $ cat test11.sh #!/bin/bash # Look before you leap # jump_directory=/home/arthur # if [ -d $jump_directory ] then echo "The $jump_directory directory exists" cd $jump_directory ls else echo "The $jump_directory directory does not exist" fi # $ $ ./test11.sh The /home/arthur directory does not exist
- 符合條件比較
[ condition1 ] && [ condition2 ] [ condition1 ] || [ condition2 ]
雙方括號(hào)
- 雙方括號(hào)提供了字符串比較的高級(jí)特性昔字。
- 括號(hào)中可以定義一些正則表達(dá)式來匹配字符串
- 注意不是所有的shell都支持雙方括號(hào)!
$ cat test24.sh
#!/bin/bash
if [[ $USER == s* ]]
then
echo "Hello Seal"
else
echo "Sorry, I do not know you"
fi
# seal @ bogon in ~/Desktop/Shell [17:36:57]
$ ./test24.sh
Hello Seal