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

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 执行脚本之前,先将脚本内容提示在屏幕上

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值