【Linux学习010】算数运算、文件测试、字符测试、位置变量和特殊变量
一、算术运算
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】算数运算、文件测试、字符测试、位置变量和特殊变量相关推荐
- Linux学习——第三部分 文件内容、搜索命令、系统信息
文章目录 一.文件内容 1. head:查看文档的前几行内容 2. tail:查看文档(日志)的后几行内容 3. grep:搜索存在关键字的行 4. cut:以某种方式按照文件的行进行分割 5. so ...
- linux学习(2)——文件和目录管理
(二) 一:绝对路径和相对路径 ...
- Linux 命令之 iconv -- 转换文件的字符编码
文章目录 一.命令介绍 二.命令语法 三.常用选项 四.命令示例 (一)对指定文件进行转码,且输出到指定的文件中 一.命令介绍 iconv 命令是 Linux 系统自带的用于转换文件编码的命令行工具, ...
- Linux有关Shell算数运算的用法补充笔记
1.自增自减 Shell的自增自减和其他编程语言的语法基本上是一样的.主要包括四种:前置自增.前置自减.后置自增.后置自减.前置的原理是先修改变量的值,然后将变量的值传递出去.后置的原理是先将变量的值 ...
- Linux学习(四)- 文件查找和压缩
文件查找和压缩 1.使用locate命令 2.使用find命令 3.压缩和解压缩工具 前言:在文件系统上查找符合条件的文件时通常用到 locate和find 这俩种命令,locate是属于非实时查找( ...
- Linux学习笔记--find命令(文件搜索命令)
find,查找的意思,作用是在系统当中搜索符合条件的文件. find命令与locate命令的区别: locate: 1) 非实时查找:2) 依赖于索引,而索引构建非常占用资源,索引的创建是在系统空闲时 ...
- Linux学习5之查找文件中的某个字符串并返回所在行号
指令: head filename |grep -n string 运行记录: hadoop@Mcnode1:~/cloud/adam/xubo/data/test20160310/GCA_00000 ...
- linux复制文件命令cat ,Linux学习之四(复制移动文件命令cp等及查看文本命令cat等)2017-03-28...
一.复制和移动文件 cp: copy -r:递归复制 -i:交互式命令 -f:强制性复制 -p:保留文件原有文件属性 -L:复制链接文件的指定文件,不保持链接属性 -P:复制链接文件并保持链接属性 - ...
- Linux学习笔记三【文件及目录的权限管理篇】
文件及目录的权限管理 上篇简单介绍了下文件和目录的一些简单的操作,接下来介绍用户和文件权限的管理.首先了解用户和组账号的配置文件,然后是管理用户和组账号,最后要会设置文件和目录权限和归属. Linux ...
- Linux学习之四——磁盘与文件系统管理
一.一些基本定义 1. superblock:记录此 filesystem 的整体信息,包括inode/block的总量.使用量.剩余量, 以及文件系统的格式与相关信息等: 2. inode:记录档案 ...
最新文章
- mysql约束条件整型_MySQL 数据类型(整型,浮点型,字符类型,日期类型,枚举和集合) 约束条件 自增...
- python 节点_python在以太坊开发中节点和网络如何选择?
- 基于存储过程的ASP.NET用户登录示例
- mac:在当前文件夹打开terminal终端
- Be My Eyes app:我是你的眼
- java两个项目之间通过webservice调用-源码仅供参考
- html display失效,CSS3 中 transition-duration 对 display: none/block 属性无效?
- Python 模块EasyGui
- 简述RHEL7新特性(二)
- hmcl离线模式可以联机吗_hmcl启动器怎么联机-hmcl启动器联机方法介绍
- C# 如何将EMF文件转换成PNG文件
- roundcube邮箱手机端_手机QQ邮箱在哪里找
- java判断名字是否为张三_现有5个学生{张三,李四,王五,那六,小七}的数组,输入一个姓名,检查姓名是否存在,如果java啊...
- 基于SSM的Web网页聊天室系统
- 合规安全大考核:移动应用安全策略全盘点
- PyQt获取某天之前后的n天日期
- SCHTASKS windows计划任务
- BootstrapTable中文文档
- javascript内置函数是什么
- C# 保存窗口为图片(保存纵断面图)
热门文章
- python中List和Tuple的区别
- pc 页面在移动端怎么获取放大倍数、_逆冬:移动端排名应该怎么做?两种匹配移动端实战排名干货分享!...
- antd + react model自定义footer_阿里开源可插拔的企业级React应用框架——UmiJS
- OpenCV-Python教程(10、直方图均衡化)
- 大事化小、小事化了的动态规划
- Linear Programming and network flows P17 笔记
- 每日一题/015/tr(AB)=tr(BA)/反对称矩阵的充要条件/如果 AA‘=-A^2,那么是反对称矩阵
- 蓝队应对攻击的常用策略二
- Raki的读paper小记:Empower Entity Set Expansion via Language Model Probing
- python_迭代器、生成器