【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<<2,将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<<=3,将x的值左移3位,重新赋给变量x; 将变量的值右移指定位数之后重新赋给该变量,x>>=4,将变量x的值右移4位后重新赋给变量x。
&=、|=、^=将变量的值与指定的数值按位与之后重新赋给该变量,x&=8,将变量x的值与8按位与运算之后重新赋给变量x; 将变量的值与指定的数值按位或之后重新赋给该变量,x|=7,将变量x的值与7执行按位或运算之后重新赋给变量x; 将变量的值与指定的数值按位异或之后重新赋给该变量,x^=9,将变量x的值与9执行按位异或运算之后重新赋给变量x。

计算命令

运算操作符与运算命令意义说明
(())用于整数运算的常用运算符在(())中使用变量时可以去掉变量前的$符号
let用于整数运算使用let命令可以执行一个或者多个算术表达式,其中的变量名毋需使用$符号
expr可用于整数运算,但还有很多其他的额外功能使用expr时,运算符及用于计算的数字左右都至少有一个空格,否则会报错;使用乘号时,必须使用反斜线屏蔽其特定含义;使用expr做计算,将一个未知的变量和一个已知的整数相加,看返回码是否为0,如果为0就认为做加法的变量为整数,否则就不是整数。
bclinux下的一个计算器程序(适合整数及小数运算)[root@node13 test9]# echo `seq -s “+” 10` = `seq -s “+” 10 | bc` seq是生成数字序列,-s是指定数字序列之间的分隔符
$[]用于整数运算
awkawk既可以用于整数运算,也可以用于小数运算
declare定义变量值和属性,-i参数可以用于定义整形变量,做运算
#!/bin/bash
num1=$1
num2=$2
echo "$1+$2=$(($1+$2))"
let ret=$1-$2
echo "$1-$2=$ret"
ret=`expr $1 '*' $2 `
echo "$1*$2=$ret"
echo "$1/$2=`echo $1/$2|bc`"
echo "$1%$2=$[$1%$2]"

执行结果:
4+2=6
4-2=2
4*2=8
4/2=2
4%2=0

${}使用方法

表达式说明
${parameter}返回变量的内容
${#parameter}返回变量内容的长度(按字符)
${paramater:offset}在变量${parameter}中,从位置offset之后开始提取子串到结尾
${paramater:offset:length}在变量${parameter}中,从位置offset之后开始提取长度为length的子串
${parameter#word}从变量${parameter}开头开始删除最短匹配的word子串
${parameter##word}从变量${parameter}开头开始删除最长匹配的word子串
${parameter%word}从变量${parameter}结尾开始删除最短匹配的word子串
${parameter%%word}从变量${parameter}结尾开始删除最长匹配的word子串
${parameter/pattern/string}使用string代替第一个匹配的pattern
${parameter//pattern/string}使用string代替所有匹配的pattern
#!/bin/bash
echo "parameter is ${1}"
echo "length of parameter:${#1}"
echo "substring of parameter:${1:1:-1}"
echo "delete from front:${1##${1:0:2}}"
echo "delete from rear:${1%%${1: -2}}"
echo "replace:${1/${1:1:2}/${1: -3}}"

执行结果:
parameter is abcdefg
length of parameter:7
substring of parameter:bcdef
delete from front:cdefg
delete from rear:abcde
replace:aefgdefg

条件测试语法

条件测试语法说明
语法1: test <测试表达式>test命令和<测试表达式>之间至少有一个空格
语法2:[ <测试表达式> ]该方法和test命令的用法一样,[]的边界和内容之间至少有一个空格
语法3:[[ <测试表达式> ]]比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。[[]]中可以使用通配符等进行模式匹配
语法4:((<测试表达式>))一般用于if语句里,双小括号两端不需要有空格,测试对象只能是整数
#!/bin/bash
read -p "plaese input password:  " password
test $password = "root" && echo "login success(1)" || echo "error(1)"
[ $password = "root" ] && echo "login success(2)"|| echo "error(2)"
[[ $password = "root" ]] && echo "login success(3)"|| echo "error(3)"
if (($password == "root"))
    then
    echo "login success(4)"
    else
    echo "error(4)"
fi

执行结果:
plaese input password:  root
login success(1)
login success(2)
login success(3)
login success(4)
plaese input password:  123
error(1)
error(2)
error(3)
error(4)

简单实践

  • 通过read读入两个整数,并比较他们的大小
#!/bin/bash 
read -p "please input two number:" a b 
[ -z "$a" -o -z "$b" ] && { 
	echo "please input 'two' number" 
	exit 1 
}
expr $a + 10 &>/dev/null 
return_a=$? 
expr $b + 10 &>/dev/null 
return_b=$? 
[ "$return_a" -eq 0 -a "$return_b" -eq 0 ] || {
	 echo "please input two 'number'" 
	 exit 2 
}
[ "$a" -lt "$b" ] && { 
	echo "$a < $b" 
	exit 0 
}
[ "$a" -eq "$b" ] && { 
	echo "$a = $b" 
	exit 0 
}
[ "$a" -gt "$b" ] && { 
	echo "$a > $b" 
	exit 0 
}

执行结果:
[mmrrj@localhost shell]$ bash test.sh
please input two number:3 1
3 > 1
[mmrrj@localhost shell]$ bash test.sh
please input two number:
please input 'two' number
[mmrrj@localhost shell]$ echo $?
1
[mmrrj@localhost shell]$ bash test.sh
please input two number:123 abc
please input two 'number'
[mmrrj@localhost shell]$ echo $?
2
  • 假设执行一个可以携带参数的script,执行该脚本后屏幕会显示如下的数据:程序的文件名;共有几个参数;若参数的个数小于2个则告知用户参数数量太少;全部的参数内容;第一个参数;第二个参数。
#!/bin/bash
echo "This script name is $0"
echo "you input $# parameter"
[ $# -lt 2 ] && echo "Too few parameters,at least two" && exit 0
echo "your whole parameter is '$@'" 
echo "the 1st parameter is $1" 
echo "the 2nd parameter is $2"

执行结果:
[mmrrj@localhost shell]$ bash script.sh 123 456
This script name is script.sh
you input 2 parameter
your whole parameter is '123 456'
the 1st parameter is 123
the 2nd parameter is 456
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值