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命令的更多相关文章

  1. linux shell let, expr 命令详解

    linux命令之let.exprshell程序中的操作默认都是字符串操作,在运行数学运算符的时候可能得到意想不到的答案: var=1var=$var+1echo $var 将输出 1+1从这个例子中可 ...

  2. 【转】linux expr命令参数及用法详解

    在抓包过程中,查看某个设定时间内,数据上下行多少,用命令expr 计算! --------------------------------------------------------------- ...

  3. linux expr命令参数及用法详解

    expr用法 expr命令一般用于整数值,但也可用于字符串.一般格式为: #expr argument operator argument expr也是一个手工命令行计数器. #$expr 10 + ...

  4. linux下数学运算器:expr命令(shell中完成数学运算)

    expr用法  expr命令一般用于整数值,但也可用于字符串.一般格式为:  expr argument operator argument  expr也是一个手工命令行计数器.  $expr 10 ...

  5. Linux之expr命令详解

    expr命令: expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串. –格式为: expr Expression(命令读入Expressi ...

  6. (转)linux expr命令参数及用法详解

    linux expr命令参数及用法详解 原文:http://blog.csdn.net/tianmohust/article/details/7628694 expr用法 expr命令一般用于整数值, ...

  7. linux之expr命令

    expr命令可以实现数值运算.数值或字符串比较.字符串匹配.字符串提取.字符串长度计算等功能.它还具有几个特殊功能,判断变量或参数是否为整数.是否为空.是否为0等. 先看expr命令的info文档in ...

  8. Linux下的计算命令和求和、求平均值、求最值命令梳理

    在Linux系统下,经常会有一些计算需求,那么下面就简单梳理下几个常用到的计算命令 (1)bc命令bc命令是一种支持任意精度的交互执行的计算器语言.bash内置了对整数四则运算的支持,但是并不支持浮点 ...

  9. (转)linux应用之test命令详细解析

    linux应用之test命令详细解析 原文:https://www.cnblogs.com/tankblog/p/6160808.html test命令用法. 功能:检查文件和比较值 1)判断表达式 ...

随机推荐

  1. python基础篇 05字典

    本节主要内容:1. 字典的简单介绍2. 字典增删改查和其他操作3. 字典的嵌套 一. 字典的简单介绍:字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中 ...

  2. 爬取图片过程遇到的ValueError: Missing scheme in request url: h 报错与解决方法

    一 .scrapy整体框架 1.1 scrapy框架图 1.2 scrapy框架各结构解析 item:保存抓取的内容 spider:定义抓取内容的规则,也是我们主要编辑的文件 pipelines:管道 ...

  3. AGV小车典型设计算法及应用

    1. AGV小车的发展背景 在现代化工业的发展中,提倡高效,快速,可靠,提倡将人从简单的工作中解放出来.机器人逐渐替代了人出现在各个工作岗位上.机器人具有可编程.可协调作业和基于传感器控制等特点,自动 ...

  4. Java开发JDBC连接数据库

    Java开发JDBC连接数据库 创建一个以JDBC连接数据库的程序,包含6个步骤: JDBC五部曲1.加载驱动2.获得链接3.获取statement对象 4.执行SQL语句5.产生resultset对 ...

  5. HDU 1698 Just a Hook(线段树区间覆盖)

    线段树基本操作练习,防手生 #include <cstdio> #include <cstring> #include <cstdlib> #define lson ...

  6. JMS实战——ActiveMQ实现Pub-Sub

    前言 上篇博客<JMS实战--ActiveMQ>介绍了ActiveMQ的安装,并实现了简单的PTP模型.这篇博客我们来看一下Pub-Sub模型,之后来总结一下JMS. 实现 项目结构 其中 ...

  7. Struts2拦截指定方法的拦截器

    作者:禅楼望月 默认情况下,我们为一个Action配置一个拦截器,该拦截器会拦截该Action中的所有方法,但是有时候我们只想拦截指定的方法.为此,需要使用struts2拦截器的方法过滤特性. 要使用 ...

  8. 【bzoj4548】小奇的糖果 STL-set+树状数组

    题目描述 平面上有n个点,每个点有一种颜色.对于某一条线段,选择所有其上方或下方的点.求:在不包含所有颜色的点的前提下,选择的点数最多是多少.(本题中如果存在某颜色没有相应的点,那么选择任何线段都不算 ...

  9. 【bzoj1806】[Ioi2007]Miners 矿工配餐 dp

    题目描述 有n个物品,每个都是3种之一.现要将这n个物品分成两个序列,对于每个序列中的每个物品,可以得到 它及它前面相邻的两个物品(不足则取全部)中不同种类的个数 的收益.问最大的总收益. 输入 输入 ...

  10. android开发中常犯的几个错误整理

    新手程序猿,在开发中难免会犯各种各样的错误,以下是整理的一些android开发中常见的错误,一起来看看吧. 1.避免将多个类放在一个文件夹里面,除非是一次性使用的内部类. 就是一个文件,最好给分它同名 ...