- 使用if-then 语句
語句格式如下:
if command; then
commands
fi
[oracle@DB02 myshell]$ cat test_if.sh
#!/bin/bash
# testing the if statement
if pwd; then
echo "It worked"
fi
[oracle@DB02 myshell]$ chmod u+x test_if.sh
[oracle@DB02 myshell]$ ./test_if.sh
/home/oracle/myshell
It worked
- if-then-else 语句
語句格式如下:
if command; then
commands
else
commands
fi
[oracle@DB02 myshell]$ cat test_ifelse.sh
#!/bin/bash
# testing the else section
#
testuser=NoSuchUser
#
if grep $testuser /etc/passwd; then
echo "The bash files for user $testuser are:"
ls -a /home/$testuser/.b*
echo
else
echo "The user $testuser does not exist on this system."
echo
fi
[oracle@DB02 myshell]$ chmod u+x test_ifelse.sh
[oracle@DB02 myshell]$ ./test_ifelse.sh
The user NoSuchUser does not exist on this system.
- 嵌套if
語句格式如下:
if command; then
commands
else
if command; then
commands
else
commands
fi
fi
#使用else部分的另一种形式:elif
語句格式如下:
if command1; then
commands
elif command2; then
more commands
fi
[oracle@DB02 myshell]$ cat test_elif.sh
#!/bin/bash
# Testing nested ifs - use elif
#
testuser=myshell
#
if grep $testuser /etc/passwd; then
echo "The user $testuser exists on this system."
elif ls -d /home/$testuser; then
echo "The user $testuser does not exist on this system."
fi
[oracle@DB02 myshell]$ chmod u+x test_elif.sh
[oracle@DB02 myshell]$ ./test_elif.sh
ls: cannot access /home/myshell: No such file or directory
- test 命令
命令格式:
if test condition; then
commands
fi
#使用test命令确定变量中是否有内容
[oracle@DB02 myshell]$ cat test_test.sh
#!/bin/bash
# Testing the test command
#
my_variable="Full"
if test $my_variable; then
echo "The $my_variable expression returns a True"
else
echo "The $my_variable expression returns a False"
fi
[oracle@DB02 myshell]$ chmod u+x test_test.sh
[oracle@DB02 myshell]$ ./test_test.sh
The Full expression returns a True
#bash shell提供了另一种条件测试方法,无需在if-then语句中声明test命令。
命令格式如下:
if [ condition ]; then
commands
fi
#数值比较
test命令的数值比较功能 --比 较 描 述
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
#案例
[oracle@DB02 myshell]$ cat test_num.sh
#!/bin/bash
# Using numeric test evaluations
value1=10
if [ $value1 -gt 5 ]; then
echo "The test value $value1 is greater than 5"
else
echo "False"
fi
[oracle@DB02 myshell]$ chmod u+x test_num.sh
[oracle@DB02 myshell]$ ./test_num.sh
The test value 10 is greater than 5
- 字符串比较测试--比 较 描 述
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否比str2小 ----大于号和小于号必须转义 如 if [ $val1 \< $val2 ]; then
str1 > str2 检查str1是否比str2大 ----大于号和小于号必须转义 如 if [ $val1 \> $val2 ]; then
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0
- test命令的文件比较功能 --比 较 描 述
-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旧
- 复合条件测试
#命令格式:
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
- if-then 的高级特性 ( 用于数学表达式的双括号 )
#双括号命令允许你在比较过程中使用高级数学表达式。test命令只能在比较中使用简单的算术操作。双括号命令提供了更多的数学符号
#双括号命令的格式如下:
(( expression ))
双括号命令中会用到的其他运算符-- 双括号命令符号--符 号 描 述
val++ 后增
val-- 后减
++val 先增
--val 先减
! 逻辑求反
~ 位求反
** 幂运算
<< 左位移
>> 右位移
& 位布尔和
| 位布尔或
&& 逻辑和
|| 逻辑或
$ cat test23.sh
#!/bin/bash
# using double parenthesis
#
val1=10
#
if (( $val1 ** 2 > 90 )) ; then
(( val2 = $val1 ** 2 ))
echo "The square of $val1 is $val2"
fi
$ ./test23.sh
The square of 10 is 100
#注意,不需要将双括号中表达式里的大于号转义。这是双括号命令提供的另一个高级特性
- if-then 的高级特性 ( 用于高级字符串处理功能的双方括号 )
提供的另一个特性——模式匹配(pattern matching)
#双方括号命令提供了针对字符串比较的高级特性。双方括号命令的格式如下:
[[ expression ]]
们使用了双等号(==)。双等号将右边的字符串(r*)视为一个模式,
并应用模式匹配规则。双方括号命令$USER环境变量进行匹配,看它是否以字母r开头。如果是
的话,比较通过,shell会执行then部分的命令
$ cat test24.sh
#!/bin/bash
# using pattern matching
if [[ $USER == r* ]] ; then
echo "Hello $USER"
else
echo "Sorry, I do not know you"
fi
$ ./test24.sh
Hello rich
- case 命令
#命令的格式如下:
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
$ cat test26.sh
#!/bin/bash
# using the case command
#
case $USER in
rich | barbara)
echo "Welcome, $USER"
echo "Please enjoy your visit";;
testing)
echo "Special testing account";;
jessica)
echo "Do not forget to log off when you're done";;
*)
echo "Sorry, you are not allowed here";;
esac
$ ./test26.sh
Welcome, rich
Please enjoy your visit
网友评论