linux 的结构化命令

1、if-then语句

格式如下:

if command
then
   commands
fi

或者
if command; then
   commands
fi

2、嵌套if

格式如下:

if command
then
  commands
else
  commands
  if command
  then
    commands
  fi
fi

或者
if command
then
  commands
elif command
then
  commands
fi

3、test命令

test命令的格式非常简单,如下

test condition

condition 是test命令要测试的一系列参数和值。当用在if-then语句中时,test命令使用方式如下:

if test condition
then
   commands
fi

bash shell提供了另一种条件测试方法,无需在if-then语句中声明test命令。

if [ condition ]
then
  commands
fi

方括号定义了测试条件,注意,第一个方括号和第二个方括号之前必须加上一个空格。

test命令可以判断三类条件:

数值比较

字符串比较

文件比较

3.1、数值比较

比较描述
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是否不相等

3.2、字符串比较

比较描述
str1 = str2字符串是否相同
str1 != str2字符串是否不相同
str1 < str2字符串str1是否小于str2
str1 > str2字符串str1是否大于str2
-n str1检查str1是否不为空
-z str1检查str1是否为空

注意:test命令 和测试表达式使用标准的数学比较符号表示字符串比较,而用文本代码来表示数值比较。如果你对数值使用了数学运算符号,shell会将它们当成字符串值,可能无法得到正确的结果。

3.3、文件比较

[ -d FILE ] 如果 FILE 存在且是一个目录则为真。

[ -e FILE ] 如果 FILE 存在则为真。

[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。

[ -r FILE ] 如果 FILE 存在且是可读的则为真。

[ -s FILE ] 如果 FILE 存在且大小不为0则为真。

[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。

[ -x FILE ] 如果 FILE 存在且是可执行的则为真。

[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。

[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。

[ FILE1 -nt FILE2 ] 如果 FILE1 比 FILE2 要新,或者FILE1 存在且 FILE2 不存在则为真。

[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。

[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。

4、if-then的高级特性

bash shell提供了两项可在if-then语句中使用的高级特性:

用于数学表达式的双括号;

用于高级字符串处理功能的双方括号。

4.1、使用双括号

格式: (( expression ))

除了使用标准的数学运算符,双括号命令中用到的其它运算符号如下:

var++  后增

var--  后减

++var  先增

--var  先减

!      逻辑求反

~      位求反

**     幂运算

<<     左位移

>>     右位移

&      按位与

|      按位或

&&     逻辑与

||     逻辑或

可以在if语句中用双括号命令,也可以在脚本中的普通命令里使用来赋值。

案例1:

cat test.sh
#!/bin/bash

val=10

if (( $val ** 2 >90 ))
then
   ((val2=$val**2))
  echo "the square of $val is $val2"
fi


输出结果如下:
[root@localhost]# ./test.sh
the square of 10 is 100

注意:不需要将双括号中表达式的大于号转义,这是双括号命令提供的另一个高级特性。

4.2、使用双方括号

格式 : [[ expression ]]

双方括号里的expression使用了test命令中采用的标准字符串比较。但它提供了test命令为提供的一个特性-模式匹配。

在模式匹配中,可以定义一个正则表达式来匹配字符串值。

案例2:

cat test2.sh
#!/bin/bash

if [[ $USER == r* ]]
then
   echo "Hello $USER"
else
   echo "sorry,i do not know you"
fi


输出结果为:
[root@localhost]# ./test2.sh
Hello root

在上面的脚本中,使用了双等号,双等号将右边的字符串(r*)视为一个模式,并应用模式匹配规则。

5、case命令

case variable in
pattern1|pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#慧#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值