Shell变量运算及条件测试

本文详细介绍了Shell中的各种运算符,包括整数运算、数学计算命令,如(()、let、expr、bc、$[]、awk、declare。同时,讲解了${}的使用,如${#parameter}、${parameter:offset:length}等。此外,还深入讨论了条件测试的语法,包括(test、[[]]、[])和test命令的不同用法及其功能,如文件存在性、权限检查等。最后,通过read命令读取并比较两个整数的实例,展示了Shell脚本的实际应用。
摘要由CSDN通过智能技术生成

1.shell的运算符有哪些 

+、-求和与差
*、/、%求乘积,商,余数
**幂运算,例如3**3是求3的立方,即27

+=、-=、

*=、/=、%=

例a+=1相当于a=a+1
++variable、- -variable先将变量variable的值加1,然后再赋给variable; 先将变量variable的值减1, 然后再赋给variable

variable++、

variable--

先使用variable的值,然后再将该变量的值加1; 先使用variable的值,然后再 将该变量的值减1

位运算符、

>>

位运算通常出现在整数间,它针对的不是整个整数,而是其二进制表示形式中的 某个或者某些位(bit)。例如,2>>1是将二进制形式的2,即10,左移1位,从 而变成100,即4。 左移,4,将4左移2位,结果为16; 右移,8>>2,将8

右移两位,结果为2

&、|、~、^

按位与,8&4,将8和4进行按位与运算,结果为0; 按位或,8|4,将8和4进行 按位或运算,结果为12; 按位非,~8,将8进行按位非运算,结果为-9(一个字 符占一个字节,即8个二进制位,最高位为1时为负数); 按位异或(a异或b,

a、b值不同结果为1,相同结果为0),10^6,将10和6进行按二进制位异或运 算,结果为12。

<<=、>>=将变量的值左移指定位数之后重新赋给该变量,x,将x的值左移3位,重新 赋给变量x; 将变量的值右移指定位数之后重新赋给该变量,x>>=4,将变量x的 值右移4位后重新赋给变量x。
&=、|=、^=

将变量的值与指定的数值按位与之后重新赋给该变量,x&=8,将变量x的值与8

按位与运算之后重新赋给变量x; 将变量的值与指定的数值按位或之后重新赋给 该变量,x|=7,将变量x的值与7执行按位或运算之后重新赋给变量x; 将变量的 值与指定的数值按位异或之后重新赋给该变量,x^=9,将变量x的值与9执行按 位异或运算之后重新赋给变量x。

2.数学计算的命令有哪些,并举例使用

1)(())

用于整数运 算的常用运 算符

实例:

2)let

用于整数运算

说明:使用let命令可以执行一个或者多个算术表达式,其中的变量名毋需使 用$符号

 

3)expr

可用于整数运算,但还有很多其他的额外功能 

说明:使用expr时,运算符及用于计算的数字左右都至少有一个空格,否则 会报错;使用乘号时,必须使用反斜线屏蔽其特定含义;使用expr做 计算,将一个未知的变量和一个已知的整数相加,看返回码是否为0,如果为0就认为做加法的变量为整数,否则就不是整数。

实例:

4)bc

linux下的一 个计算器程 序(适合整 数及小数运 算)

5)$[]

用于整数运算

6)awk

awk既可以 用于整数运 算,也可以 用于小数运 算

实例:

 7)declare

定义变量值 和属性,-i参数可以用 于定义整形 变量,做运 算

实例:

3.${}中的使用,并举例包含(#, ##,%,%%,:, /, //),并举例使用

(1)${parameter}

返回变量的内容

(2)${#parameter}

返回变量内容的长度(按字符)

(3)${paramater:offset}

在变量${parameter}中,从位置offset之后开始提取子串到结 尾

(4)${paramater:offset:length}

在变量${parameter}中,从位置offset之后开始提取长度为length的子串

(5)${parameter#word}

从变量${parameter}开头开始删除最短匹配的word子串

(6)${parameter##word}

从变量${parameter}开头开始删除最长匹配的word子串

(7)${parameter%word}

从变量${parameter}结尾开始删除最短匹配的word子串

(8)${parameter%%word}

从变量${parameter}结尾开始删除最长匹配的word子串

(9)${parameter/pattern/string}

使用string代替第一个匹配的pattern ${parameter//pattern/string} 使用string代替所有匹配的pattern

实例:

 

4.条件测试的语法 (()), [[]],[],test,功能以及语法格式 

在shell中,用户可以使用测试语句来测试指定的条件表达式的条件的真或假。当指定的条件为 真时,整个条件测试的返回值为0;反之,如果指定的条件为假,则条件测试语句的返回值为非0值。

语法

语法1: test <测试表达式> 

语法格式:test命令和<测试表达式>之间至少有一个空格   

语法2:[ <测试表达式> ]

语法格式:该方法和test命令的用法一样,[]的边界和内容之间至少有一个空格

语法3:[[ <测试表达式> ]]

语法格式:比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。[[]]中可以使用通配符等进行模式匹配

语法4:((<测试表达式>))

语法格式:一般用于if语句里,双小括号两端不需要有空格,测试对象只能是整数

功能

-a/-e 文件

文件是否存在

-b 文件

文件是否存在,且为块文件,如果文件存在且是一个块文件,则结果 为0 -c 文件 文件是否存在且为字符文件,如果文件存在且是一个字符文件,则结 果为0 -L 文件 文件存在且为链接文件则为真

-d 文件

文件存在且为目录则为真,即测试表达式成立

-f 文件

文件存在且为普通文件则为真,即测试表达式成立

-s 文件

文件存在且文件大小不为0则为真

-u 文件

文件是否设置suid位,如果设置了suid,则结果为0 -r 文件 文件存在且可读为真

-w 文件

文件存在且可写为真

-x 文件

文件存在且可执行则为真

f1 -nt f2,nt为newer than

文件f1比文件f2新则为真,根据文件的修改时间来计算

f1 -ot f2,ot为older than

文件f1比文件f2旧则为真,根据文件的修改时间来计算

5.通过read读入两个整数,并比较他们的大小

 

 6.假设执行一个可以携带参数的script,执行该脚本后屏幕会显示如下的数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值