linux 加减法脚本,linux下的脚本变量和运算

使用linux,许多时候都需要编写脚本,我们先从基础开始,带领大家进入linux的世界!

请看我们这一期的专题,变量和运算!

简单变量

在 BASH 中变量定义是不需要的,没有 "int i" 这样的定义过程。如果想用一个变量,只要他没有在前面被定义过,就直接可以用,当然你使用该变量的第一条语句应该是对他赋初值了,如果你不赋初值也没关系,只不过该变量是空( 注意:是 NULL,不是 0 )。不给变量赋初值虽然语法上不反对,但不是一个好的编程习惯。好了我们看看下面的例子:

首先用 vi 编辑下面这个文件 hello2:

#!/bin/bash

# give the initialize value to STR

STR="Hello World"

echo $STR

在上面这个程序中我们需要注意下面几点:

一,变量赋值时,'='左右两边都不能有空格;

二,BASH 中的语句结尾不需要分号(";");

三,除了在变量赋值和在FOR循环语句头中,BASH 中的变量使用必须在变量前加"$"符号,同学们可以将上面程序中第三行改为 "echo STR" 再试试,看看会出什么结果。

四,由于 BASH 程序是在一个新的进程中运行的,所以该程序中的变量定义和赋值不会改变其他进程或原始 Shell 中同名变量的值,也不会影响他们的运行。

更细致的文档甚至提到以但引号括起来的变量将不被 BASH 解释为变量,如 '$STR' ,而被看成为纯粹的字符串。而且更为标准的变量引用方式是 ${STR} 这样的,$STR 自不过是对 ${STR} 的一种简化。在复杂情况下(即有可能产生歧义的地方)最好用带 {} 的表示方式。

BASH 中的变量既然不需要定义,也就没有类型一说,一个变量即可以被定义为一个字符串,也可以被再定义为整数。如果对该变量进行整数运算,他就被解释为整数;如果对他进行字符串操作,他就被看作为一个字符串。请看下面的例子:

#!/bin/bash

x=1999

let "x = $x + 1"

echo $x

x="olympic'"$x

echo $x

关于整数变量计算,有如下几种:" + - * / % ",他们的意思和字面意思相同。整数运算一般通过 let 和 expr 这两个指令来实现,如对变量 x 加 1 可以写作:let "x = $x + 1" 或者 x=`expr $x + 1`

在比较操作上,整数变量和字符串变量各不相同,详见下表:

对应的操作   整数操作 字符串操作

相同          -eq         =

不同          -ne        !=

大于          -gt         >

小于          -lt         <

大于或等于    -ge

小于或等于    -le

为空                      -z

不为空                    -n

比如:

比较字符串 a 和 b 是否相等就写作:if [ $a = $b ]

判断字符串 a 是否为空就写作: if [ -z $a ]

判断整数变量 a 是否大于 b 就写作:if [ $a -gt $b ]

更细致的文档推荐在字符串比较时尽量不要使用 -n ,而用 ! -z 来代替。(其中符号 "!" 表示求反操作)

BASH 中的变量除了用于对 整数 和 字符串 进行操作以外,另一个作用是作为文件变量。BASH 是 Linux 操作系统的 Shell,因此系统的文件必然是 BASH 需要操作的重要对象,如 if [ -x /root ] 可以用于判断 /root 目录是否可以被当前用户进入。下表列出了 BASH 中用于判断文件属性的操作符:

运算符 含义( 满足下面要求时返回 TRUE )

-e file 文件 file 已经存在

-f file 文件 file 是普通文件

-s file 文件 file 大小不为零

-d file 文件 file 是一个目录

-r file 文件 file 对当前用户可以读取

-w file 文件 file 对当前用户可以写入

-x file 文件 file 对当前用户可以执行

-g file 文件 file 的 GID 标志被设置

-u file 文件 file 的 UID 标志被设置

-O file 文件 file 是属于当前用户的

-G file 文件 file 的组 ID 和当前用户相同

file1 -nt file2 文件 file1 比 file2 更新

file1 -ot file2 文件 file1 比 file2 更老

注意:上表中的 file 及 file1、file2 都是指某个文件或目录的路径。

关于局部变量

在 BASH 程序中如果一个变量被使用了,那么直到该程序的结尾,该变量都一直有效。为了使得某个变量存在于一个局部程序块中,就引入了局部变量的概念。BASH 中,在变量首次被赋初值时加上 local 关键字就可以声明一个局部变量,如下面这个例子:

#!/bin/bash

HELLO=Hello

function hello {

local HELLO=World

echo $HELLO

}

echo $HELLO

hello

echo $HELLO

该程序的执行结果是:

Hello

World

Hello

这个执行结果表明全局变量 $HELLO 的值在执行函数 hello 时并没有被改变。也就是说局部变量 $HELLO 的影响只存在于函数那个程序块中。

BASH 中的变量与 C 语言中变量的区别

这里我们为原来不熟悉 BASH 编程,但是非常熟悉 C 语言的程序员总结一下在 BASH 环境中使用变量需要注意的问题。

1,BASH 中的变量在引用时都需要在变量前加上 "$" 符号( 第一次赋值及在For循环的头部不用加 "$"符号 );

2,BASH 中没有浮点运算,因此也就没有浮点类型的变量可用;

3,BASH 中的×××变量的比较符号与 C 语言中完全不同,而且×××变量的算术运算也需要经过 let 或 expr 语句来处理;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值