云计算-shell之算术扩展 和let 命令运算 和 expr 整数运算和退出状态码exit的使用
2019-03-14 23:25
531 查看
算术扩展和let进行算术运算
算术扩展- 可以对算术表达式求值并替换成所求得的值
- 看一下格式: $(( 算术表达式))
注意:算术表达式只能是整数,不能对浮点数进行算术运算
上栗子:
[root@xieqc 桌面]# var=5 [root@xieqc 桌面]# var=$(( $var + 8 )) [root@xieqc 桌面]# echo $var 13 //变量也可以作为运算数,上面的var不加$也可以,效果是一样的额 [root@xieqc 桌面]# x=17 [root@xieqc 桌面]# y=2 [root@xieqc 桌面]# z=$(( x%y )) [root@xieqc 桌面]# echo $z 1 //求余运算 [root@xieqc 桌面]# echo $(( 10>3 )) 1 //比较运算,如果 条件成立,返回值为1 ,条件不成立,返回值为0 [root@xieqc 桌面]# a=28 [root@xieqc 桌面]# b=25 [root@xieqc 桌面]# c=$(( $(( a>b ))?a:b)) [root@xieqc 桌面]# echo $c 28 //?号前面的结果为真,或结果数值大于1,返回a的值,否则返回b的值
let运算
- 运算不能有空格
- 若非要有看空格怎么办?用双引号引起来!
[root@xieqc 桌面]# let i=i+5 [root@xieqc 桌面]# echo $i 5 [root@xieqc 桌面]# let i=i + 5 bash: let: +: 语法错误: 期待操作数 (错误符号是 "+") [root@xieqc 桌面]# echo $i 5 [root@xieqc 桌面]# let "i=i + 5" [root@xieqc 桌面]# echo $i 10 [root@xieqc 桌面]#let i++ [root@xieqc 桌面]#echo $I 11 //变量后递增加1 [root@xieqc 桌面]# let “i = i <6 ? i : 6 ” //问号? 前的表达式值为真,取i的值,否则取6 [root@xieqc 桌面]#echo $i 6上诉变量i的值不存在间断的情况,结合在一起看。
expr运算命令
- 这是一个对运算表达式求值,并输出结果
- 只支持整数运算,不支持浮点运算数
- 运算符必须包含空格,否则不识别,会输出算术表达式
- 特殊运算符还需要 \ 进行转义,否则语法错误
算了,这么麻烦不用了…
来,说归说,闹归闹,还是举个栗子看一下:
[root@xieqc 桌面]# expr 6 + 8 14 [root@xieqc 桌面]# expr 6+8 6+8 //看到了吗,不加空格你试试! [root@xieqc 桌面]# expr 6 \* 8 48 //转义 [root@xieqc 桌面]# expr 1 \< 2 1 [root@xieqc 桌面]# expr 2 \> 5 0 //结果为真,则返回1,否则返回0 [root@xieqc 桌面]# a=25 [root@xieqc 桌面]# b=24 [root@xieqc 桌面]# expr $a \* $b 600 //支持变量进行运算哦
退出状态码 exit 的使用
对于一个好的脚本来说,当它运行完成时,应该返回一个退出状态,否则是没有灵魂的
- 每一个命令都会返回一个退出状态
- 运行成功会返回0
- 可以通过$? 的值去查看返回值
- 不成功会返回一个非0值
举个栗子看一下:
cd $SOME_DIR rm -rf *
这两行代码看起来没什么问题,但是,仔细考虑一下,如果SOME_DIR不存在呢?
会发生什么事情?
在这种情况下,cd命令失败,而rm删除的命令会在当前命令下执行,好,可以跑路了对吧。
上诉脚本的问题在于,运行rm命令之前没有检查cd命令的退出状态
怎么办?
往下看:
- exit N 可以提交一个退出状态码给shell
- N 必须是0~255之间的整数
- 错误时,返回一个非0值
- 正确时,返回0
cd $SOME_DIR if [ $? -eq 0 ];then rm -rf * else echo "Cannot change directory!" exit 1 fi //如果cd命令失效,会打印一个错误信息,返回状态码1
- 特别是在备份脚本中,状态码更显得重要了。
调试脚本
- bash -x 以调试模式运行脚本
- bash -v 激活详细输出模式
- bash -xv 这就更加详细的进行调试输出信息了
执行下面的命令之后,调试 时可以显示行号:
$ export PS4='+{$LINENO:${FUNCNAME[0]}}'
解释一下,LINENO表示shell脚本的当前行号
PS4 调试时那个+号就是它定义的
FUNCNAME 包含了当前在执行调用堆栈中的所有shell的函数名称的数组变量
还有很多类似的内置变量,都对调试有用的,可以使用man bash 去看看。
- bash -n 调试shell脚本中是否存在语法错误
- 每行代码不多于80个字符
- 保持一致的缩进深度
- 每一个代码块之间留一个空行,提高脚本的可读性
- 必须要有注释
- 必须要有注释
- 必须要有注释
- 说三遍!
- 不是为了让别人看懂,是给你自己看的(很久之后的自己…你懂得!)
相关文章推荐
- shell脚本只提供整数算术运算(三种方式)—((表达式))、let "表达式"、value=`expr 表达式右边` (转载)
- Linux命令之exit - 退出当前shell【返回值状态】
- Linux命令之exit - 退出当前shell【返回值状态】
- 【Unix/Linux.Shell Script】退出状态,exit命令
- 我使用过的Linux命令之exit - 退出当前shell
- (())、let、expr、bc等计算命令的使用语法和应用技巧
- (())、let、expr、bc等计算命令的使用语法和应用技巧
- (())、let、expr、bc等计算命令的使用语法和应用技巧
- SHELL学习——退出状态、测试(整数\字符串\ 文件\逻辑运算符)
- Linux Shell学习笔记:exit退出状态代码
- Linux-shell-算术运算{expr、bc、dc、(( ))和[ ]}
- let 与 expr Shell运算比较 let强强胜出
- shell的date命令:使用方法,以及小时、分钟的计算
- shell基础:使用read、命令行脚本传参实现输入2个整数并计算
- 【shell脚本】命令代换 ` `, $( ) ,整数运算$(( )),变量代换${ },eval命令
- shell使用笔记-算术运算
- 【类unix系统shell基础】1.10命令替换与整数运算$(),$(())
- linux命令:浅谈shell中如何进行算术运算
- 建议使用ssh工具后,用exit命令退出,而不是直接点“x”
- exit命令_Linux exit 命令用法详解:退出当前的shell