Linux 之test expr命令
test指令(使用指令man查询)
功能:检查文件类型,值比较。
test的各种参数和使用。
test EXPRESSION1 –a EXPRESSION2 |
当表达式1和表达式2同时为真时值为真 |
test EXPRESSION1 –o EXPRESSION2 |
当表达式1或者表达式2为真时值为真 |
test –n STRING 或者 test STRING |
当STRING串的长度不为零时值为真 |
test –z STRING |
当STRING串长度为零时值为真 |
test STRING1 = STRING2 |
当STRING1和STRING2相同时值为真 |
test STRING1 != STRING2 |
当STRING1 和 STRING2不同时值为真 |
test INTEGER1 –eq INTEGER2 |
当INTEGER1等于INTEGER2时值为真 |
test INTEGER1 –ge INTEGER2 |
当INTEGER1大于或者等于INTEGER2时值为真 |
test INTEGER1 –gt INTEGER2 |
当INTEGER1 大于INTEGER2时值为真 |
test INTEGER1 –le INTEGER2 |
当INTEGER1小于等于INTEGER2时值为真 |
test INTEGER1 –lt INTEGER2 |
当INTEGER1 小于INTEGER2时值为真 |
test INTEGER1 –ne INTEGER2 |
当INTEGER1不等于INTEGER2时值为真 |
test FILE1 –ef FILE2 |
当FILE1和FILE2有同样的device和inode号时为真(详细见linux文件学习笔记) |
test FILE1 –nt FILE2 |
当FILE1修改时间比FILE2新时值为真 |
test FILE1 –ot FILE2 |
当FILE1修改时间比FILE2旧时值为真 |
test –b FILE |
FILE存在并且内容是block类型的 |
test –c FILE |
FILE存在并且是字符类型的 |
test –d FILE |
FILE存在并且是一个目录 |
test –e FILE |
FILE是否存在 |
test –f FILE |
FILE存在并且是一个正则表达式类型的文档 |
test –g FILE |
FILE存在并且是 set-group-ID也就是SGID(详细见后文学习笔记) |
test –G FILE |
FILE存在并且由有效的GROUP ID所拥有(详细见后文学习笔记) |
test –h FILE |
FILE存在并且是一个符号链接(详细见后文学习笔记) |
test –k FILE |
FILE存在并且设置了sticky bit set(详细见后文学习笔记) |
test –L FILE |
FILE存在并且是一个符号链接 |
test –O FILE |
FILE存在并且由一个有效的USER ID所拥有 |
test –p FILE |
FILE存在并且是一个命名管道(命名管道见后文学习笔记) |
test –r FILE |
FILE存在并且授予了可读的权限 |
test –s FILE |
FILE存在并且size大于0 |
test –S FILE |
FILE存在并且是一个socket |
test –t FD |
文件的描述符FD在终端打开 |
test –u FILE |
FILE存在并且SUID已经被设置 |
test –w FILE |
FILE存在并且授予了写操作权限 |
test –x FILE |
FILE存在并且授予了可执行的权限 |
----------------------------------------------------------------------------------------------------------------------------------------------------
expr
expr是linux的手工命令行计数器,它可以帮助我们完成一些基本的表达式值运算。同时它也是一个字符串处理工具
(1) 整数运算
$expr ARG1 | ARG2
$expr ARG1 & ARG2
$expr ARG1 < ARG2
$expr ARG1 <= ARG2
$expr ARG1 = ARG2
$expr ARG1 != ARG2
$expr ARG1 >= ARG2
$expr ARG1 > ARG2
$expr ARG1 + ARG2
$expr ARG1 – ARG2
$expr ARG1 * ARG2
使用乘法时,需要使用反斜杠进行转义
$expr ARG1 % ARG2
(2) 字符串操作
$expr length “xxx” //计算字符串长度
$expr substr “this is a”pos length //从第pos位开始截取length长度的子串
$expr index “tesr”e //获取e在主串中首次出现的位置
(3) 增量计数
例子
loop=3
loop=`expr $loop + 1`
echo $loop
结果是4,在第二行代码中,使用反引号,shell会将反引号中的内容作为一个系统命令,这样一来,就好像我们在命令行内输入了expr $loop + 1然后这个命令的返回结果被赋值到loop。
(4) 模式匹配(按照正则表达式模式匹配串)
通过指定冒号选项计算字符串中字符数。.*意即任何字符重复0次或多次。
> VALUE=account.doc
> expr $VALUE : ’.*’
8
在expr中可以使用字符串匹配操作,这里使用模式抽取.doc文件附属名。
$expr $VALUE : ‘\(.*\).doc’
accounts
(5) 其他
+ TOKEN
将TOKEN解释为串,不管它是一个关键字或者一个操作符
延伸知识:
引号的作用
1 双引号(“”)
1)使用””可引用除字符$(美元符号)、`(反引号)、\(反斜线)外的任意字符或字符串。双引号不会阻止shell对这三个字符做特殊处理(标示变量名、命令替换、反斜线转义)。
Eg:name=gezn; echo “User name:$name”//将打印User name :gezn
Echo “The date is:`date +date-%d-%m-%Y`”//将打印The date is: 03-05-2009
Echo –e “$USER\t$UID” //将打印gezn 500
2)如果要查新包含空格的字符串经常用到双引号
2 单引号(’’)
1) 如果用单引号把字符串括起来,则dayi9nhao内字符串中的任何特殊字符的特殊含义均被屏蔽。
2) 举例:echo –e ‘$USER\t$UID’//将打印$USER $UID(没有屏蔽\t,是因为选项“-e”的缘故)
echo ‘USER\t$UID’ //将打印$USER\t$UID
3 反引号(``)
1) shell将反引号中的内容作为一个系统命令,并执行其内容。使用这种方法可以替换输出为一个变量
2) 举例:a=`date + date-%d-%m-%Y` //将打印The date is: 03-05-2009
4.反斜线(\)
1)如果下一个字符有特殊含义,反斜线防止shell误解其含义,即屏蔽其特殊含义。
2)下属字符包含有特殊含义:& * + $ ` “ | ?
3) 在打印字符串时要加入八进制字符(ASCII相应字符)时,必须在前面加反斜线,否则shell作普通数字处。
举例: bj=Beijing; echo ”variable\$bj=$bj”//将打印variable $bj = beijing
------------------------------------------------------------------------------------------------------------------------------------------------
Shell特殊变量
在Shell中,预先定义了几个有特殊含义的Shell变量,它们的值只能由Shell根据实际情况进行赋值,而不能通过用户重新设置。shell的特殊变量包括它的位置和一些系统变量.
(一)常用位置变量:
$# 命令行上实际参数的个数,但不包含Shell脚本名。
$? 上一条命令执行后的返回值(也称作 “退出码”)。它是一个十进制数。多数Shell命令执行成功时,则返回值为0;如果执行失败,则返回非0值。
$$ 当前进程的进程号。
$! 上一个后台命令对应的进程号,这是一个由1~5位数字构成的数字串。
$- 由当前Shell设置的执行标志名组成的字符串。例如:
set -xv 这个命令行给Shell设置了标志-x和-v(用于跟踪输出)。
$* 表示在命令行中实际给出的所有实参字符串,它并不仅限于9个实参。
$@ 它与$*基本功能相同,但是使用时加引号,并在引号中返回每个参数
$0 脚本名称
$1..$9 第N个参数
下面的aaa bbb 为变量名
${aaa:-bbb} 如果$aaa为空或未定义,则取值$bbb.否则取值$aaa
${aaa:+bbb} 如果$aaa非空,则取值$bbb,否则取值为空
${aaa:=bbb} 如果$aaa非空,则取值$aaa,否则取值$bbb而且赋值(aaa=bbb)
${aaa:3} 如果aaa=abcdefg,则${aaa:3}的值为:defg ,相当于substr,计数从0开始
${aaa:3:2} 如上; ${aaa:3:2}取值为: de.相当于substr
${#aaa} 字符串$aaa的长度.
(二)常用系统变量:
$HOME 用户的主目录
$USER 用户名称
$GROUP 用户所属组名
$PATH 默认的搜索路径
$HOSTNAME 主机名称
$TZ 时区
$MAIL 存放邮件的路径名
练手:
#!/bin/bash
echo $0
echo $*
echo $@
echo $#
echo $$
echo $_
在terminal窗口中执行:
./test.sh -a -b –c /home
./test.sh
-a -b -c /home
-a -b -c /home
4
3250
/home
区别$*和$@编写如下test.sh脚本:
#!/bin/bash
function testargs
{
echo "$# args"
}
testargs "$*"
testargs "$@"
unset -f testargs
在terminal窗口中执行:
./test.sh -a -b /home
1 args //很明显就一个嘛,传入的是$*这个串,不是解释后的参数
3 args //$@必须和引号搭配,所以结果正确
#!/bin/bash
function testargs
{
echo "$# args"
}
testargs $*
testargs $@
unset -f testargs
再次执行有:
./test.sh -a -b /home
3 args
3 args
作者:Aga.J
出处:http://www.cnblogs.com/aga-j
Linux 之test expr命令的更多相关文章
- linux shell let, expr 命令详解
linux命令之let.exprshell程序中的操作默认都是字符串操作,在运行数学运算符的时候可能得到意想不到的答案: var=1var=$var+1echo $var 将输出 1+1从这个例子中可 ...
- 【转】linux expr命令参数及用法详解
在抓包过程中,查看某个设定时间内,数据上下行多少,用命令expr 计算! --------------------------------------------------------------- ...
- linux expr命令参数及用法详解
expr用法 expr命令一般用于整数值,但也可用于字符串.一般格式为: #expr argument operator argument expr也是一个手工命令行计数器. #$expr 10 + ...
- linux下数学运算器:expr命令(shell中完成数学运算)
expr用法 expr命令一般用于整数值,但也可用于字符串.一般格式为: expr argument operator argument expr也是一个手工命令行计数器. $expr 10 ...
- Linux之expr命令详解
expr命令: expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串. –格式为: expr Expression(命令读入Expressi ...
- (转)linux expr命令参数及用法详解
linux expr命令参数及用法详解 原文:http://blog.csdn.net/tianmohust/article/details/7628694 expr用法 expr命令一般用于整数值, ...
- linux之expr命令
expr命令可以实现数值运算.数值或字符串比较.字符串匹配.字符串提取.字符串长度计算等功能.它还具有几个特殊功能,判断变量或参数是否为整数.是否为空.是否为0等. 先看expr命令的info文档in ...
- Linux下的计算命令和求和、求平均值、求最值命令梳理
在Linux系统下,经常会有一些计算需求,那么下面就简单梳理下几个常用到的计算命令 (1)bc命令bc命令是一种支持任意精度的交互执行的计算器语言.bash内置了对整数四则运算的支持,但是并不支持浮点 ...
- (转)linux应用之test命令详细解析
linux应用之test命令详细解析 原文:https://www.cnblogs.com/tankblog/p/6160808.html test命令用法. 功能:检查文件和比较值 1)判断表达式 ...
随机推荐
- DO NOT BELIEVE HIS LIES 游戏随笔
这游戏是我大学的一个基友推荐的,好吧,感觉被他坑了··· 解谜游戏~慢慢来玩玩··· 恩,就是下面红色圈圈画起来的这个家伙. #1 第一关 好吧,界面上也没啥可聊的,上面写了一行字,THE FIRST ...
- 「Haskell 学习」一 环境与大致了解
感谢<Real World Haskell>在网上的免费发布,可以白嫖学Haskell这个久闻大名的函数式编程语言了. 本文运行于openSUSE Tumbleweed下,运行相关命令时留 ...
- Qt 在Label上面绘制罗盘
自己写的一个小小的电子罗盘的一个小程序,不过是项目的一部分,只可以贴绘制部分代码 效果如下图 首先开始自己写的时候,虽然知道Qt 的坐标系是从左上角开始的,所以,使用了算法,在绘制后,在移动回来,但是 ...
- 《机器学习实战》 in python3.x
机器学习实战这本书是在python2.x的环境下写的,而python3.x中好多函数和2.x中的名称或使用方法都不一样了,因此对原书中的内容需要校正,下面简单的记录一下学习过程中fix的部分 1.pr ...
- git instaweb 500 error
在arch 系统中安装perl-cgi包. 在deiban中参考:https://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A ...
- nodeJs 调试异步程序追踪异步报错
DeprecationWarning: Calling an asynchronous function without callback is deprecated. 翻译: 不建议在不回调的情况下 ...
- arm单板上移植gdb
虚拟机 : vmware 12 image: ubuntukylin 14.04.1 系统版本:Linux dancy 3.13.0-32-generic #57-Ubuntu SMP Tue Jul ...
- lintcode-62-搜索旋转排序数组
62-搜索旋转排序数组 假设有一个排序的按未知的旋转轴旋转的数组(比如,0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2).给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引 ...
- PhalApi 1.4.2 经典封存版 - 码云
https://www.phalapi.net/ PhalApi 1.x 是经典封存版本,已停止更新,历练考验,可放心使用. 主要采用PEAR命名规范,遵循PSR-0,不支持命名空间和composer ...
- ui-grid下拉过滤
{ field: 'TDK', displayName: 'TDK缺失与否', cellTemplate: `<div class="ui-grid-cell-contents&quo ...