目录
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
参考:菜鸟教程