前言
首先在Shell中,括号表示条件测试方法。主要用在if-then、case等需要条件判断的语句结构中。
最近在看bash,括号搞的我一头雾水,所以总结一下,理清思路!
括号
- 括号一般在命令替换的时候使用。
#!/bin/bash
today=$(date +%y%m%d)
touch log.$today
双括号
- 使用双括号,在比较过程中使用高级数学表达式
符号 | 描述 | |
---|---|---|
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
- 注意,不需要将双括号中表达式里的大于号转义。这是双括号命令提供的另一个高级特性。
方括号
方括号定义了测试条件。
第一个方括号后和第二个方括号前都要加一个空格,否则会报错。
-
方括号主要包括4类判断:
- 数值比较
比较 描述 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的长度是否非0 -z str1 检查str1的长度是否为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是否存在并是一个目录 -e file 检查file是否存在 -f file 检查file是否存在并是一个文件 -r file 检查file是否存在并可读 -s file 检查file是否存在并非空 -w file 检查file是否存在并可写 -x file 检查file是否存在并可执行 -O file 检查file是否存在并属当前用户所有 -G file 检查file是否存在并且默认组与当前用户相同 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 ]
双方括号
- 双方括号提供了字符串比较的高级特性。
- 括号中可以定义一些正则表达式来匹配字符串
- 注意不是所有的shell都支持双方括号!
$ 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