test 命令最短的定义可能是评估一个表达式;如果条件为真,则返回一个 0 值。如果表达式不为真,则返回一个大于 0 的值 — 也可以将其称为假值。检查最后所执行命令的状态的最简便方法是使用 $? 值。出于演示的目的,本文中的例子全部使用了这个参数。

test 命令期望在命令行中找到一个参数,当 shell 没有为变量赋值时,则将该变量视为空。这意味着在处理脚本时,一旦脚本寻找的参数不存在,则 test 将报告该错误。

test 文件运算符

利用这些运算符,您可以在程序中根据对文件类型的评估结果执行不同的操作:

逻辑判断:

-b file 如果文件为一个块特殊文件,则为真

-c file 如果文件为一个字符特殊文件,则为真

-d file 如果文件为一个目录,则为真

-e file 如果文件存在,则为真

-f file 如果文件为一个普通文件,则为真

-g file 如果设置了文件的 SGID 位,则为真

-G file 如果文件存在且归该组所有,则为真

-k file 如果设置了文件的粘着位,则为真

-O file 如果文件存在并且归该用户所有,则为真

-p file 如果文件为一个命名管道,则为真

-r file 如果文件可读,则为真

-s file 如果文件的长度不为零,则为真

-S file 如果文件为一个套接字特殊文件,则为真

-t fd 如果 fd 是一个与终端相连的打开的文件描述符(fd 默认为 1),则为真

-u file 如果设置了文件的 SUID 位,则为真

-w file 如果文件可写,则为真

-x file 如果文件可执行,则为真

file1 -ef file2 测试以判断两个文件是否与同一个设备相连,是否拥有相同的 inode 编号

file1 -nt file2 测试以判断第一个文件是否比第二个文件更新(由修改日期决定)

file1 -ot file2 测试以判断第一个文件是否比第二个文件更旧

字符串比较运算符

如标题所示,这组函数比较字符串的值。您可以检查它们是否存在、是否相同或者是否不同。

String 测试以判断字符串是否不为空

-n string 测试以判断字符串是否不为空;字符串必须为 test 所识别

-z string 测试以判断字符串是否为空;字符串必须为 test 所识别

string1 = string2 测试以判断 string1 是否与 string2 相同

string1 != string2 测试以判断 string1 是否与 string2 不同

str1=str2 若str1与str2相同则为真

str1!=str2 若str1与str2不相同则为真

str1

str1>str2 若str1比str2排序较大则为真

-z str 若str长度为0则为真

-n str 若str长度大于0则为真

整数比较运算符

正如字符串比较运算符验证字符串相等或不同一样,整数比较运算符对数字执行相同的功能。如果变量的值匹配则表达式测试为真,如果不匹配,则为假。整数比较运算符不处理字符串(正如字符串运算符不处理数字一样):

int1 -eq int2 如果 int1 等于 int2,则为真

int1 -ge int2 如果 int1 大于或等于 int2,则为真

int1 -gt int2 如果 int1 大于 int2,则为真

int1 -le int2 如果 int1 小于或等于 int2,则为真

int1 -lt int2 如果 int1 小于 int2,则为真

int1 -ne int2 如果 int1 不等于 int2,则为真

[]用在if语句中可以替代test。O(∩_∩)O~!!

特殊符号:? * [] ; && ||

.

代表一个任意字符,一定要有一个字符存在

?

匹配0次或者1次,也可以用于表示单一字符

*

匹配任意次,也可以用于表示任意字符

[^list]

不属于list的元素,与[list]相反

[^range]

不属于range的元素,与[range]相反

\{n\}

与前一个相同条件连续匹配n个

\{n,m\}

与前一个相同条件连续匹配n到m个

-rw-rw-r--(文件权限) 1(文件链接数) chase(拥有者)chase(用户组号) 2(文件大小)Feb 17 00:17(最后修改日期) a.txt(文件名)上面的信息表示文件是由chase拥有和属于chase用户组。而在权限位上,我们可以把它分成四部分:

-(文件类型) rw-(拥有者权限) rw-(用户组权限) r--(其他用户权限)

对于第一部分表示文件的类型,

在linux下一共有七种文件类型,包括:

1、套接字(s),

2、符号链接文件(l),

3、普通文件(-),

4、块设备文件(b),

5、目录(d),

6、字符设备(c)

7、命名管道(P) (括号中是文件在权限位上的表示符)。

其他三部份结构类似,都是用三个字符(rwx)表示。

r对应的是读权限,w对应的是写权限,x对应的是有运行的权限。

对于这三部分我们都可以用三位二进制或一位八进制数来表示,当某一位使能时就把这一位符值为1,如rw-就表示读和写位使能,对应的位赋1,所以在这种情况下可以用二进制110或八进制6表示。

什么是Shell Scripts?

-一系列连续命令

条件判断:

if test ; then

action

else

action

fi

test也可以应用[]替代哦!!

if test -f $1

then

filename=$1

set `ls -il $filename`

echo file $filename inode=$1 and size=$6

fi

if [ -d $1 ]; then

count=`ls $1 | wc -w`

echo directory $1 have$count files

exit 0

fi

注意:

-在[]中,只能有一个判断式

-在[]与[]之间,可以使用&&或||组合

复杂的if语句:

if [ condition ]; then

action

elif [ condition2 ]; then

action2

elif [ condition3 ]; then

action3

else

actionx

fi

-分支判断:

case 字符串 in

串1)

动作1

;;

串2)

动作2

;;

*)

动作3

esac

myvar="hello"

myfunc(){

myvar="one two three"

for x in $myvar

do

echo $x

done

}

#invoke function

myfunc

echo $myvar $x

循环:

-for语句:

for((条件1;条件2;条件3))

do

action

done

for 变量 [in 变量1 变量2 ...]

do

action

done

不带in部分时参数有命令行提供

while语句:只要条件满足就一直执行

while [条件]

do

动作action

done

例子如下:

count=0

while [ $# != 0 ]

do

count=$(($count + $1))

#count=`expr $count + $1`

shift

done

until语句:直到满足条件才退出

until [条件]

do

动作action

done

-语法:

函数名称() {

函数体

}

function 函数名{

函数体

}

-函数调用方法:

函数名称

myvar="hello"

myfunc(){

myvar="one two three"

for x in $myvar

do

echo $x

done

}

#invoke function

myfunc

echo $myvar $x

调试:

-sh [-nv] scripts

-n 不执行脚本,查询脚本语法,有错误就列出

-v 执行脚本之前,先将脚本内容提示在屏幕上

有志者事竟成 破釜沉舟百二秦关终属楚 苦心人天不负 卧薪尝胆三千越甲可吞吴

linux 写一个包含test的脚本程序,linux的test命令及相关shell脚本详解相关推荐

  1. linux远程脚本事例,ssh远程执行命令方法和Shell脚本实例

    写这篇博客之前,我google了一堆相关文章,大都是说修改/etc/sudoers,然后NOPASSWD:指定的cmd,但是真心不管用,没有远程虚拟终端这个方法就是浮云,ubuntu10.04 ser ...

  2. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-汇总 ( Chapter1-Chapter16 )

    一.初识 Linux shell Linux 系统可划分为以下 4 部分. Linux 内核 GNU 工具 图形化桌面环境 应用软件 内核主要负责以下 4 种功能. 系统内存管理 内核通过硬盘上称为交 ...

  3. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter6-Linux 环境变量

    六.Linux 环境变量 bash shell 使用环境变量来存储 shell 会话和工作环境的相关信息(这也是被称作环境变量的原因).环境变量允许在内存中存储数据, 以便 shell 中运行的程序或 ...

  4. python软件代码示例-用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  5. Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)

    Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本) 转载于:https://www.cnblogs.com/zhehan54/p/9549017.html

  6. 怎样用java写一个简单的文件复制程序

    怎样用java写一个简单的文件复制程序 代码来源:https://jingyan.baidu.com/article/c35dbcb0d6f1398916fcbc07.html package Num ...

  7. 写一个《扎金花》程序自己玩。

    写一个<扎金花>程序自己玩.hongjin2用一年半的时间基本自学完了程序设计专业的主干课程(除了<扎金花>,hongjin2实在看不懂),1995年hongjin2参加了初级 ...

  8. 能不能用python开发qq_用Python写一个模拟qq聊天小程序的代码实例

    用Python写一个模拟qq聊天小程序的代码实例 发布时间:2020-09-09 07:49:29

  9. 用Python写一个模拟qq聊天小程序的代码实例

    前言 今天小编就为大家分享一篇关于用Python写一个模拟qq聊天小程序的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 Python 超简单的聊天 ...

最新文章

  1. 新后缀再开放,投资者应谨慎对待!
  2. 大数据从业10年,从一个BI项目的失败,看到数据治理的重要性
  3. php和xml区别,html与xhtml和xml有什么区别
  4. MySQL防止重复插入记录SQL
  5. php创建图片的缩略图,如何通过php给图片创建缩略图?
  6. ClassNotFoundException: com.lowagie.text.pdf.PdfGState
  7. 8*8*8光立方制作
  8. 穿越火线老是卡在正在连接服务器,修复cf经常提示网络出现异常与服务器断开连接的方法...
  9. Python中函数的说明与注释
  10. 计算机如何连接wifi台式,回答如何将台式计算机连接到WiFi
  11. kali linux安装upupoo_Kali Linux 下载、引导、安装
  12. python pyecharts绘制旭日图Sunburst
  13. java 累加器_09-flink-Accumulator(累加器)
  14. Hibernate主键生成策略总结
  15. HTML表单验证pattern
  16. Python3+Flickrapi爬取图片
  17. mysql trans begin_[原创]MySQL RR隔离级别下begin或start transaction开启事务后的可重复读?...
  18. 理论篇-地图学与GIS制图的基础理论(二)
  19. STM32H743ZI+MPU+LWIP ping解决
  20. 【路径规划-多式联运】基于遗传算法求解多式联运冷链运输成本优化问题附matlab代码

热门文章

  1. 一加代言人小罗伯特唐尼竟用华为P30 Pro发微博,当然是笑着原谅他
  2. 苹果WWDC 2019最全剧透抢先看:iOS夜间模式要来了!
  3. iis5.1安装方法(适用于XP)以及运行调试asp程序,创建虚拟目录【整理】
  4. 计算机制说明书的实训报告,实训报告总结
  5. a*算法的时间复杂度_算法的时间复杂度:大O表示法
  6. 看门狗超时前在内核打印信息
  7. maven build后Downloading maven-metadata.xml
  8. mysql 升序_MySQL“自古以来”都有一个神秘的HANDLER命令
  9. 【Flink】Flink中流动的四种元素
  10. 【Flink】Unauthorized request to start container. This token is expired. current time is