Linux Shell入门学习(四)

1. Shell的注释

在shell脚本中也可以有注释,不过和大多数编程语言不同的是,shell中采用#来添加注释。

#!/bin/bash
i=10
str="hello world"
#以下是输出
echo $i
echo $str

在要注释的行开头加上#号就可以将改行注释。但是如果要注释很多行的时候,给每一行加#号非常繁琐,效率低。在c语言中可以用/* */来注释一个代码块。在shell中则可以用:<<+注释名来注释整块代码。
其注释的一般形式为:

:<< a
   注释的代码
a

可以把a理解为这块注释的名字,结束的时候也需要以该名字结束。看一个实例:

#!/bin/bash
a=1
b=2
c=3
:<<a
str="hello"
str2="world"
str3="linux"
str4="shell"
a

2. Shell中的运算符

在shell中支持许多的运算符,常用的运算符类型主要有以下几种:

  1. 算术运算符
  2. 关系运算符
  3. 布尔运算符
  4. 文件测试运算符
  5. 字符串运算符

3. Shell中的算术运算

shell本身不能直接算术运算,需要借助数学计算命令才能完成计算。因为在shell中,如不是特别指明,变量的存储都是以字符串的形式存储的。

#!/bin/bash
i=10
j=20
echo i+j

输出:

i+j

可见,shell并没有把i和j相加输出。要想输出30,就要数学计算命令出马了。常用的数学计算命令有以下:

计算指令描述
(())用于整数的计算
expr可用于整数的计算,也可以用于处理字符串
let用于整数的计算
bc支持整数与小数的计算

expr的使用

#!/bin/bash
val=`expr 30 + 10`
echo "30+10=${val}"
i=10
j=20
val=`expr $i + $j`
echo "i+j=${val}"

输出:

30+10=40
i+j=30

使用expr完成的计算的任务。在使用expr的时候有两个点需要注意:

  1. 表达式要被反引号包含,键盘Esc下面那个
  2. 表达式与运算符之间需要有空格。
val=expr 20 + 30  #error 没有用反引号包含表达式
val=`expr 20+30` #error  运算符两边需要有空格

(())的使用
使用(())计算的一般格式:

val=$((表达式)) #将表达式的结果赋值给val

下面看一个具体的例子。

#!/bin/bash
i=10
j=20
sum=$((i+j))
sub=$((j-i))
echo "sum=$sum"
echo "sub=$sub"

注意,表达式里的变量如i和j就不用再用$取值了,因为(())会自动解析表达式里变量的值。
除了将(())计算的结果赋值给变量,也可以将表达式的结果直接使用echo命令输出,但是要记得加上美元符号。另外,在()中也可以包含多个表达式,每一个表达式用逗号隔开,(())命令返回的值将会是最后一个表达式的值。

#!/bin/bash
i=10
j=20
echo $((i+j))
val=$((i+j,j-i))
echo $val

输出:

30
10

第二个(())包含了两个表达式,从结果来看确实是返回了第二个表达式的值。

bc命令的使用
bc是Linux内置的计算程序,能够处理小数的运算。在shell如有浮点数的运算都是用bc来进行计算。
其在shell中使用的一般形式为:

val=`echo "表达式" | bc`

如果表达式的值不需要赋给变量,则可以直接用下面的形式:

echo "表达式"|bc
#!/bin/bash
i=1.1
j=2.2
val=`echo "i+j" | bc`
echo $val

输出

0

这就奇怪了,难道不是3.3吗?为什么是0呢?其实是因为bc是不知道i和j变量的存在的,他只能使用""里面定义的变量,如下:

#!/bin/bash
val=`echo "i=1.1;j=2.2;i+j" | bc`
echo $val

输出3.3。另外需要注意的是在""里面定义的i和j变量在shell脚本中是不可以使用的。
那如果非要计算shell中定义的变量呢?可以如下做:

#!/bin/bash
i=1.1
j=2.2
val=`echo "a=$i;b=$j;a+b"|bc`
echo $val

在""定义变量采用shell中的变量赋值就可以了。bc命令中的内置变量scale可以指定精度。

#!/bin/bash
val=`echo "scale=2;i=1.111;j=2.222;i+j" |bc`
echo $val

输出3.333。

4. Shell中的其他运算

关系运算符
关系运算符只支持数字,不支持字符串。常用的关系运算符及其含义如下:

-eq:两数相等返回true,不相等返回false
-ne:两数不相等返回false,相等返回false
-gt:左边的数大于右边的数返回true,否则返回false
-lt:左边的数小于右边的数返回true,否则返回false
-ge:左边的数大于等于右边的数返回true,否则返回false
-le:左边的数小于等于右边的数返回true,否则返回false

文件测试运算符
文件运算符主要是测试linux中文件的各种属性,例如是否存在,是否可读可写等等,常用的有如下:

-e:检测文件是否存在,存在返回true
-r:检测文件是否可读,可读返回true
-w:检测文件是否可写,可写返回true
-x:检测文件是否可执行,可执行返回true
-d:检测该文件是否为目录,是目录返回true
-f:检测该文件是否为普通文件(不是目录),是普通文件返回true
-s:检测文件大小是否大于0,大于0返回true

字符串运算符

=:两个字符串相等返回true
!=:两个字符串不相等返回true
$:检测是否是空串,不为空返回0
-z:字符串的长度是否为0,为0返回true
-n:字符串的长度是否不为0,不为0返回tue

布尔运算符

!:非运算,表达式为真则返回false,为假返回true
-o:或运算,有一个表达式为真则返回true
-a:与运算,所有的表达式都为真则返回true,否则返回false

逻辑运算符

&&:逻辑与
||:逻辑或

shell中的关系运算符,字符串运算符等其他运算符将会在下一篇文章中结合if…else语句做一些示例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值