shell学习之路--操作符和数字常量

目录

一、操作符 Operators

二、操作优先级  Operator Precedence

三、数字常量 Numerical Constants


一、操作符 Operators

1.赋值 Assignment

1.1 = 等号 Equal

 1.1.1 变量赋值  Variable Assignment

 [root@server1 ~]# a=28

 [root@server1 ~]# echo $a

 28

1.1.2 字符串比较操作 String comparison operator

 a. if [ “$string1” = “$string2” ]

 b. if [ “X$string1”  = “X$string2” ]

 then

  command

 fi

2.算术操作符  Arithmetic Operators

+

加法计算

Plus

-

减法计算

Minus

*

乘法计算

Multiplication

/

除法计算

Division

**

幂运算

Exponentiation

%

模运算,求余运算

返回一次除法运算的余数modulo

+=

加等于

把变量的值增加一个常量然后再把结果赋给变量

-=

减等于

把变量的值减去一个常量然后再把结果赋给变量

*=

乘等于

先把变量的值乘以一个常量的值,然后再把结果赋给变量

/=

除等于

先把变量的值除以一个常量的值,然后再把结果赋给变量

%=

取模等于

先对变量进行模运算,然后把结果赋给变量

例:计算两个数的最大公约数Greatest Common Divisor

#!/bin/bash
#采用辗转相除法,求两个数的最大公约数
ARGS=2
E_BADARGS=65
if [ $# -ne "$ARGS" ]
then
  echo "Usage: `basename $0` first-number second-number"
  exit $E_BADARGS
fi
gcd ()
{
 dividend=$1
 divisor=$2
 remainder=1
 until [ "$remainder" -eq 0 ]
 do
  let "remainder = $dividend % $divisor"
  dividend=$divisor
  divisor=$remainder
 done
}
gcd $1 $2

echo ; echo "($1,$2)=$dividend";echo
exit 0

[root@server1 ~]# ./ji.sh 22 12

(22,12)=2

#!/bin/bash
#算术操作符的练习,用十种不同的方法
n=0; echo -n "$n"
#1:let
let "n = $n+1" # let "n = n+1" 也可以
echo -n "$n"
#2:变量扩展
: $(( n = $n +1  ))    #注意首行的冒号
echo -n "$n"
#3:双圆括号,赋值操作
(( n = n+1 )) # 与方法2不同的
echo -n "$n"
#4:变量重新赋值
n=$(($n+1))
echo -n "$n"
#5;与2类似
: $[n = $n + 1]  #注意首行的冒号
echo -n "$n"
#6:与4类似
n=$[$n +1]
echo -n "$n"
#7:let自加
let "n++" # let "++n" 也可以
echo -n "$n"
#8:整数扩展 自加
((n++)) # ((++n)) 也可以
echo -n "$n"
#9:变量扩展 自加
: $((n++)) #$((++n)) 也可以
echo -n "$n"
#10:与9类似
: $[n++]  #$[++n] 也可以
echo -n "$n"
echo 
exit 0

 

浮点数:bash默认处理不了

[root@server1 ~]# let "a = 1.1 + 2.2" ;echo $a

-bash: let: a = 1.1 + 2.2: 语法错误: 无效的算术运算符 (错误符号是 ".1 + 2.2")

28

[root@server1 ~]# echo "a = 1.1 + 2.2" | bc

3.3

3.位操作符  Bitwise Operators

<<

左一位(每次左移但相对于乘以2)

<<=

左移-赋值

>>

右移-赋值(每次右移都将除以2)

>>=

右移-赋值(与<<=正好相反)

&

按位与

&=

按位与-赋值

|

按位或

| =

按位或-赋值

~

按位反

按位非

^

按位异或XOR

^=

按位异或-赋值

4.逻辑操作符  Logical (Boolean) Operators

4.1 ! 非

 if [ ! -f $FILENAME ] ; then

 …

4.2 && 于

 4.2.1 if [ $condition1 ] && [ $confition2 ]

 4.2.2 if [ [ $condition1  &&  $confition2 ] ]

4.3 | | 或

4.3.1 if [ $condition1 ] || [ $confition2 ]

4.3.2 if [ [ $condition1  ||  $confition2 ] ]

5.杂项操作符  Miscellaneous Operators

5.1 , 逗号操作符可以连接两个或多个算术运算

5.2所有的操作都会被运行,但是只会返回最后操作的结果

#!/bin/bash
let "t1 = ((5+3,7-1,15-4))"
echo "t1 = $t1"
let "t2 = ((a=9,15/3))"
echo "t2=$t2 a=$a"

 

 5.3常用于for循环中

#/bin/bash
#使用类似c语言的“逗号操作符”,来同时增加两个变量的值
for (( a=1, b=1; a <= LIMIT ; a++, b++)) #用逗号同时进行两条操作
do
 echo -n "$a-$b"
done

二、操作优先级  Operator Precedence

基本原则

如果优先级相同那么从左到右

先乘除后加减

例:操作符优先级

a. “看山发“ :先看轮廓,后看细节

1.while [ -n “$remaining” -a “$retry” -gt 0 ] ; do

2. if [ -f /etc/sysconfig/i180 -a -z “${NOLOVALE:-} : ] : then

b.最佳策略:增加一些方括号,方便阅读

1. if [ “$v1” -gt “$v2” -o “$v1” -lt “$v2” -a -e “$filename” ]

2.if [[ “$v1” -gt “$v2” ]] || [[ “$v1” -lt “$v2” ]] && [[ -e “$filename” ]

三、数字常量 Numerical Constants

 3.1 默认情况下,数字是10进制数

 let "dec = 32"

3.2 8进制:以0开头

 let “oct = 032”

3.3 16进制:以0x开头

 let “hex = 0x32”

3.4其他进制:BASE:NUMBER

 let “bin = 2#111100111001101” 

 let “bin = 32#77”  

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值