一、算术运算

Bash中的算术运算方法有一下几种:

1.使用let命令

kdyzm@kdyzm:~$ let A=1+2
kdyzm@kdyzm:~$ echo $A
3
kdyzm@kdyzm:~$

2.$[expression]

kdyzm@kdyzm:~$ A=$[1+2]
kdyzm@kdyzm:~$ echo $A
3
kdyzm@kdyzm:~$

3.$((expression))

kdyzm@kdyzm:~$ B=$((1+2))
kdyzm@kdyzm:~$ echo $B
3
kdyzm@kdyzm:~$

4.使用expr命令

kdyzm@kdyzm:~$ expr 1+2
1+2
kdyzm@kdyzm:~$ expr 1 + 2
3
kdyzm@kdyzm:~$

上面的运算结果显示使用expr表达式需要注意操作符两侧必须带有空格,否则被识别为字符串类型。

二、文件测试

文件测试也是使用test命令,同样可以简写成为[expression]

test-b    FILE:文件存在而且是块设备文件-c    FILE:文件存在而且是字符设备文件-d    FILE:文件存在而且是目录-e    FILE:文件存在-f    FILE:文件存在而且是一个普通文件-h|-L    FILE:文件存在而且是一个链接文件-p    FILE:文件存在而且是一个命名管道文件-S    FILE:文件存在而且是一个套接字文件-s    FILE:文件存在而且大小不为0-r    FILE:文件存在而且可读(当前用户)-w    FILE:文件存在而且可写(当前用户)-x    FILE:文件存在而且可执行(当前用户)

三、字符测试

字符测试是使用test命令,同样可以简写成为[expression]

test-n    STRING:字符串长度不为0-z    STRING:字符串长度为0STRING1 = STRING2    :两个字符串相同STRING1 != STRING2    :两个字符串不相同

四、位置变量与特殊变量

1.特殊变量

$?    :命令执行状态结果,0表示成功,1-255表示失败
$#    :参数的个数
$*    :参数列表
$@    :参数列表

2.位置变量

bash中使用位置变量能够直接引用命令参数,$1表示第一个参数,$2表示第二个参数,,,,,

3.使用shift命令

shift

shift命令能够“删除”掉参数列表中的第一个参数,使得是使用$1访问原来参数列表中的第二个参数。

多次使用shift命令的结果以此类推。

五、杂项

1.自定义退出码

    exit n

使用exit能够退出脚本,如果只是单独的使用一个exit命令,,没有定义退出码,使用最后执行的一条命令的执行状态结果作为退出码。

2.使用bash命令检测脚本文件是否有语法错误

bash -n FILE    :检测脚本稳健是否有语法错误
bash -x FILE    :单步执行,将每一步的执行过程打印到屏幕

六、练习

1.写一个脚本,能够接收一个参数,判断该参数是否是一个文件,如果是,则打印文件类型,否则提示文件不存在。

#!/bin/bashif [ -e $1 ];thenfile $1
elseecho "No such file !"
fi

2.写一个脚本,给该脚本传递两个参数,显示两个数的和与乘积,如果参数不够则进行提示并退出。

#!/bin/bashif [ $# -lt 2 ];thenecho "USAGE : test4.sh ARG1 ARG2"exit 1
fi
echo "$1+$2=$[$1+$2]"
echo "$1*$2=$[$1*$2]"

3.传递三个参数给脚本,第一个数是整数,第二个是操作符,第三个数是整数,将计算结果计算出来显示在屏幕上。

#!/bin/bash
echo $@if [ $# -lt 3 ] ;thenecho "USAGE : calculate.sh VAR1 OPERATOR VAR2"exit 1
fi
VAR1=$1
OP=$2
VAR2=$3
if [ $OP = '+' ];thenecho "$VAR1+$VAR2=$[$VAR1+$VAR2]"exit 0
elif [ $OP = '-' ];thenecho "$VAR1-$VAR2=$[$VAR1-$VAR2]"exit 0
elif [ $OP = '*' ];thenecho "$VAR1*$VAR2=$[$VAR1*$VAR2]"exit 0
elif [ $OP = '/' ];thenecho "$VAR1/$VAR2=$[$VAR1/$VAR2]"exit 0
elseecho "The Operator must be +-*/"exit 1
fi

这里还有一个非常重要的问题需要注意,在运行该命令的时候,输入形式应当如下所示:

kdyzm@kdyzm:~/scripts$ ./calculate.sh 2 '\*' 3
2 \* 3
The Operator must be +-*/
kdyzm@kdyzm:~/scripts$

首先,操作符必须使用''括起来,同时,需要用反斜线转义操作符:

+ -> '\+'
- -> '\-'
* -> '\*'
/ -> '\/'

这么做是有原因的,特别是*符号,它有在bash中有特殊的含义,使用

echo 2 * 3

命令,将会显示如下结果:

kdyzm@kdyzm:~$ echo 2 * 3
2 a.txt b.txt datastructure Desktop Documents Downloads examples.desktop Music Pictures ProgramFiles Public scripts SoftWare Templates Untitled Document Untitled Document~ Videos 3
kdyzm@kdyzm:~$

* 在这里会被bash解析成“显示所有文件”的意思,所以必须对其进行转义,使用'\'进行转义,但是仅仅这样还不够,必须得加上''表示强引用才行,否则的话还是会被解析;这里使用echo $@命令查看参数列表。

转载于:https://blog.51cto.com/kdyzm/1740741

【Linux学习010】算数运算、文件测试、字符测试、位置变量和特殊变量相关推荐

  1. Linux学习——第三部分 文件内容、搜索命令、系统信息

    文章目录 一.文件内容 1. head:查看文档的前几行内容 2. tail:查看文档(日志)的后几行内容 3. grep:搜索存在关键字的行 4. cut:以某种方式按照文件的行进行分割 5. so ...

  2. linux学习(2)——文件和目录管理

    (二) 一:绝对路径和相对路径                                                                                     ...

  3. Linux 命令之 iconv -- 转换文件的字符编码

    文章目录 一.命令介绍 二.命令语法 三.常用选项 四.命令示例 (一)对指定文件进行转码,且输出到指定的文件中 一.命令介绍 iconv 命令是 Linux 系统自带的用于转换文件编码的命令行工具, ...

  4. Linux有关Shell算数运算的用法补充笔记

    1.自增自减 Shell的自增自减和其他编程语言的语法基本上是一样的.主要包括四种:前置自增.前置自减.后置自增.后置自减.前置的原理是先修改变量的值,然后将变量的值传递出去.后置的原理是先将变量的值 ...

  5. Linux学习(四)- 文件查找和压缩

    文件查找和压缩 1.使用locate命令 2.使用find命令 3.压缩和解压缩工具 前言:在文件系统上查找符合条件的文件时通常用到 locate和find 这俩种命令,locate是属于非实时查找( ...

  6. Linux学习笔记--find命令(文件搜索命令)

    find,查找的意思,作用是在系统当中搜索符合条件的文件. find命令与locate命令的区别: locate: 1) 非实时查找:2) 依赖于索引,而索引构建非常占用资源,索引的创建是在系统空闲时 ...

  7. Linux学习5之查找文件中的某个字符串并返回所在行号

    指令: head filename |grep -n string 运行记录: hadoop@Mcnode1:~/cloud/adam/xubo/data/test20160310/GCA_00000 ...

  8. linux复制文件命令cat ,Linux学习之四(复制移动文件命令cp等及查看文本命令cat等)2017-03-28...

    一.复制和移动文件 cp: copy -r:递归复制 -i:交互式命令 -f:强制性复制 -p:保留文件原有文件属性 -L:复制链接文件的指定文件,不保持链接属性 -P:复制链接文件并保持链接属性 - ...

  9. Linux学习笔记三【文件及目录的权限管理篇】

    文件及目录的权限管理 上篇简单介绍了下文件和目录的一些简单的操作,接下来介绍用户和文件权限的管理.首先了解用户和组账号的配置文件,然后是管理用户和组账号,最后要会设置文件和目录权限和归属. Linux ...

  10. Linux学习之四——磁盘与文件系统管理

    一.一些基本定义 1. superblock:记录此 filesystem 的整体信息,包括inode/block的总量.使用量.剩余量, 以及文件系统的格式与相关信息等: 2. inode:记录档案 ...

最新文章

  1. mysql约束条件整型_MySQL 数据类型(整型,浮点型,字符类型,日期类型,枚举和集合) 约束条件 自增...
  2. python 节点_python在以太坊开发中节点和网络如何选择?
  3. 基于存储过程的ASP.NET用户登录示例
  4. mac:在当前文件夹打开terminal终端
  5. Be My Eyes app:我是你的眼
  6. java两个项目之间通过webservice调用-源码仅供参考
  7. html display失效,CSS3 中 transition-duration 对 display: none/block 属性无效?
  8. Python 模块EasyGui
  9. 简述RHEL7新特性(二)
  10. hmcl离线模式可以联机吗_hmcl启动器怎么联机-hmcl启动器联机方法介绍
  11. C# 如何将EMF文件转换成PNG文件
  12. roundcube邮箱手机端_手机QQ邮箱在哪里找
  13. java判断名字是否为张三_现有5个学生{张三,李四,王五,那六,小七}的数组,输入一个姓名,检查姓名是否存在,如果java啊...
  14. 基于SSM的Web网页聊天室系统
  15. 合规安全大考核:移动应用安全策略全盘点
  16. PyQt获取某天之前后的n天日期
  17. SCHTASKS windows计划任务
  18. BootstrapTable中文文档
  19. javascript内置函数是什么
  20. C# 保存窗口为图片(保存纵断面图)

热门文章

  1. python中List和Tuple的区别
  2. pc 页面在移动端怎么获取放大倍数、_逆冬:移动端排名应该怎么做?两种匹配移动端实战排名干货分享!...
  3. antd + react model自定义footer_阿里开源可插拔的企业级React应用框架——UmiJS
  4. OpenCV-Python教程(10、直方图均衡化)
  5. 大事化小、小事化了的动态规划
  6. Linear Programming and network flows P17 笔记
  7. 每日一题/015/tr(AB)=tr(BA)/反对称矩阵的充要条件/如果 AA‘=-A^2,那么是反对称矩阵
  8. 蓝队应对攻击的常用策略二
  9. Raki的读paper小记:Empower Entity Set Expansion via Language Model Probing
  10. python_迭代器、生成器