shell 数组与基本运算符 -shell 笔记3

目录

 

shell 数组

基本运算符

expr

条件表达式

关系运算符

布尔运算符

字符串运算符

read 命令


shell 数组

shell中用括号来表示数组,数组元素用空格符号分割开。

如:array_name=(value0 value1 value2 value3)
或者:
array_name=(
value0
value1
value2
value3
)

 

可以单独定义数组的各个分量,且可以使用不连续的下标,下标的范围也没有限制。

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuex

 

读取数组元素的值格式一般是

${数组名[下标]}

也可以使用@符号获取数组中的所有元素

echo ${array_name[@]}

输出value0 value1 value2 value3 valuex

获取数组长度的方法与获取字符串长度的方法相同,都是用#

# 取得数组元素的个数

length0=${#array_name[@]}

#或者

length1=${#array_name[*]}

#取得数组单个元素的长度

lengthn=${#array[n]}

echo ${length0} ${length1} ${lengthn}

输出:4 4 6

 

基本运算符

expr

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

实例

#!/bin/bash

val=`expr 2 + 2`
echo "两数之和$val"
执行脚本,输出结果如下所示:

两数之和为 : 4

两点注意:

  • 表达式和运算符之要有空格,例如 2+2 是不的,必写成 2 + 2,(加号中间要有空格)与我熟悉的大多数言不一
  • 完整的表达式要被 ` ` 包含,注意个字符不是常用的引号,在 Esc

 

数值运算在shell中也可以直接进行。如:

a=5

b=6

result=$[a + b]

echo " result 为: $result"

输出

result 为: 11

条件表达式

件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

另外注意判断的表达式是条件语句if...then...fi

if [ $a != $b ]
then
   echo "a 不等于 b"
fi

要上下都有对应的。

 

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。在shell里有专门的字符串运算符。

 

-eq

检测两个数是否相等,相等返回 true。

[ $a -eq $b ] 返回 false。

-ne

检测两个数是否不相等,不相等返回 true。

[ $a -ne $b ] 返回 true。

-gt

检测左边的数是否大于右边的,如果是,则返回 true。

[ $a -gt $b ] 返回 false。

-lt

检测左边的数是否小于右边的,如果是,则返回 true。

[ $a -lt $b ] 返回 true。

-ge

检测左边的数是否大于等于右边的,如果是,则返回 true。

[ $a -ge $b ] 返回 false。

-le

检测左边的数是否小于等于右边的,如果是,则返回 true。

[ $a -le $b ] 返回 true。

布尔运算符

a=10 b=20

运算符

说明

举例

!

非运算,表达式为true,则返回false,否则返回true

[  ! false  ] 返回 true。

-o

或运算,有一个表达式为 true 则返回 true。

[  $a -lt 20 -o $b -gt 100  ] 返回 true。

-a

与运算,两个表达式都为 true 才返回 true。

[  $a -lt 20 -a $b -gt 100  ] 返回 false。

字符串运算符

注意字符串运算符 比较字符串是否相等为一个=, 而数值是否相等为两个==

运算符

说明

举例

=

检测两个字符串是否相等,相等返回 true。

[ $a = $b ] 返回 false。

!=

检测两个字符串是否相等,不相等返回 true。

[ $a != $b ] 返回 true。

-z

检测字符串长度是否为0,为0返回 true。

[ -z $a ] 返回 false。

-n

检测字符串长度是否不为 0,不为 0 返回 true。

[ -n "$a" ] 返回 true。

$

检测字符串是否为空,不为空返回 true。

[ $a ] 返回 true。

假定变量 a 为 "abc",变量 b 为 "efg":

例子:

a="abc"
b="efg"

if [ $a = $b ]
then
   echo "$a = $b : a 等于 b"
else
   echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ -z $a ]
then
   echo "-z $a : 字符串长度为 0"
else
   echo "-z $a : 字符串长度不为 0"
fi

输出

abc = efg: a 不等于 b
abc != efg : a 不等于 b
-z abc : 字符串长度不为 0

read 命令

从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量

#!/bin/sh

read name 
echo "$name It is a test"

 

以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:

[root@www ~]# sh test.sh
OK                     #标准输入
OK It is a test        #输出

read 命令一个一个词组地接收输入的参数,每个词组需要使用空格进行分隔;如果输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收。

测试文件 test.sh 代码如下:

read firstStr secondStr
echo "第一个参数:$firstStr; 第二个参数:$secondStr"

执行测试:

$ sh test.sh 
   
第一个参数:一; 第二个参数:二  

 

 

echo  输出命令2

echo  -e   内容    -e表示开启转义(不要-e在mac终端中也可以实现转义)

如:

echo -e "OK! \n" # -e 开启转义 其中\n为换行符
echo "It is a test"

输出结果:下面为显示换行了。

OK!
It is a test

\c 为不换行如:

#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"

输出结果:

OK! It is a test

参考:菜鸟教程

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页