内容:
1.if-then结构化命令中最基本的类型,其格式如下:
if command
then
commands
fi
这里需要注意的是在其他语言中if 语句之后的对象是一个等式来测试是TRUE还是FALSE值,而在bash shell中if 语句会运行if 行定义那个命令。如果该命令退出码是数字0,则表示该命令运行成功,位于then 后面的命令就会运行。如果退出码是其他值,那么then后面的命令就不会执行。
oracle@suse:~> cat test
#!/bin/bash
#test if-then
if ls
then
echo "ls worked"
fi
将第4行ls命令换成bash shell不识别的命令,比如sdjflsdjfl,执行脚本会报错.
oracle@suse:~> cat test
#!/bin/bash
#test if-then
if sdjflsdjfl
then
echo "ls worked"
fi
oracle@suse:~> ./test
./test: line : sdjflsdjfl: command not found
2.if-then-else,格式如下:
if command
then
commands
else
commands
fi
当if语句中的命令退出码是0时,then部分命令会执行,否则就会执行else部分命令。
2.1嵌套if,当脚本代码中有多个判断条件时,可以用elif 代替else部分,格式如下:
if command1
then
commands
elif command2
then
commands
fi
oracle@suse:~> cat test1
#!/bin/bash
if jjj
then
echo "1 worked"
elif lllls
then
echo "2 worked"
elif date
then
echo "3 worked"
fi
oracle@suse:~> ./test1
./test1: line : jjj: command not found
./test1: line : lllls: command not found
Thu Apr :: CST
worked
3.如果test命令中列出的条件成立,test命令就会退出并返回退出码0,如果条件不成立test命令就会退出并返回退出码1。test 命令,格式:
test condition
与if-then配合使用
if test condition
then
commands
fi
bash shell另一种声明test方法,用方括号[],需要注意[]与condition之间有空格,就是必须在左括号右侧和右括号左侧各加一个空格,否则会报错。
if [ condition ]
then
commands
fi
3.1使用test进行数值比较
n1 -eq n2 检查n1是否等于n2
n1 -gt n2 检查n1是否大于n2
n1 -ge n2 检查n1是否大于等于n2
n1 -lt n2 检查n1是否小于n2
n1 -le n2 检查n1是否小于等于n2
n1 -ne n2 检查n1是否不等于n2
oracle@suse:~> cat test2.sh
#!/bin/bash
#using numeric test comparisons
var1=
var2= if [ $var1 -gt ]
then
echo "the value $var1 is greater than 88"
fi if [ $var1 -gt $var2 ]
then
echo $var1 ">" $var2
else
echo $var1"<="$var2
fi oracle@suse:~> ./test2.sh
the value is greater than
>
3.2 使用test进行字符串比较
str1 = str2 检查str1是否和str2相同
str1 > str2 检查str1是否比str2大
str1 < str2 检查str1是否比str2小
str1 != str2 检查str1是否和str2不同
-n str1 检查str1长度是否非零
-z str1 检查str1长度是否为零
oracle@suse:~> cat test3.sh
#!/bin/bash
#testing string str1=hello
str2=word if [ -z $str ]
then
str=$str2
echo $str
fi if [ $str1 = $str2 ]
then
echo "str1 = str2"
else
echo "str1 != str2"
fi
oracle@suse:~> ./test3.sh
word
str1 != str2
需要注意使用大于号和小于号时候要在其前面使用转义字符 \ .否则可能会报错,或者将大小于号当成重定向。
oracle@suse:~> cat test4.sh
#!/bin/bash
#testing string str1=abcd
str2=abcdef if [ $str1 \< $str2 ]
then
echo "$str1 less than $str2"
fi
oracle@suse:~> ./test4.sh
abcd less than abcdef
3.3使用test进行文件比较
-d file 检查file是否存在并是一个目录
oracle@suse:~/testshell> cat testfile.sh
#/bin/bash
#test "-d file"
if [ -d $HOME/testshell ]
then
echo "$HOME/testshell is exists"
cd $HOME/testshell
pwd
else
echo "$HOME/testshell is not exists"
fi if [ -d $HOME/nba ]
then
echo "$HOEM/nba is exists"
cd $HOME/nba
pwd
else
echo "$HOME/nba is not exists"
fi oracle@suse:~/testshell> ./testfile.sh
/home/oracle/testshell is exists
/home/oracle/testshell
/home/oracle/nba is not exists
3.4复合条件测试,if-then允许使用布尔逻辑组合测试
[ command1 ] && [ command2 ]
[ command1 ] || [ command2 ]
oracle@suse:~/testshell> cat showhello.sh
#/bin/bash
echo "hello world"
oracle@suse:~/testshell> cat testfile2.sh
#/bin/bash
#test [ command1 ] && [ command2 ] if [ -f $HOME/testshell/showhello.sh ] && [ -x $HOME/testshell/showhello.sh ]
then
cd $HOME/testshell
./showhello.sh
else
echo "it is not exists"
fi oracle@suse:~/testshell> ./testfile2.sh
hello world
3.5 if-then高级特性双尖括号与双中括号,(( expression ))双尖括号命令允许将高级数学表达式放入比较中,[[ expression ]]双方括号命令提供了针对字符串比较的高级特性。
oracle@suse:~/testshell> cat testfile3.sh
#/bin/bash
#using double parenthesis var1=
var2= if (( ++var1* > var2 ))
then
echo "$var1*10 is greater $var2"
else
echo "$var1*10"
fi if [[ $USER == ora* ]]
then
echo "hello $USER"
else
echo "there is no this user"
fi
oracle@suse:~/testshell> ./testfile3.sh
* is greater
hello oracle
4.case命令
case variable in
pattern1 | pattern2 ) commands1 ;;
pattern3) commands2;;
*) default commands;;
esac
oracle@suse:~/testshell> cat testcase.sh
#/bin/bash
#using the case command case $USER in
rich)
echo "hello rich";;
jim)
echo "hello jim";;
tom)
echo "hello tom";;
*)
echo "you are no here"
echo "user is $USER";;
esac
oracle@suse:~/testshell> ./testcase.sh
you are no here
user is oracle