linux shell脚本使用结构化命令

时间:2023-12-29 09:50:14

内容:

一.if-then命令

二.if-then-else命令

三.test命令

四.case命令

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

linux shell脚本使用结构化命令

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