括号
#!/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