shell编程if条件判断文档格式.docx

上传人:b****6 文档编号:21089300 上传时间:2023-01-27 格式:DOCX 页数:13 大小:19.44KB
下载 相关 举报
shell编程if条件判断文档格式.docx_第1页
第1页 / 共13页
shell编程if条件判断文档格式.docx_第2页
第2页 / 共13页
shell编程if条件判断文档格式.docx_第3页
第3页 / 共13页
shell编程if条件判断文档格式.docx_第4页
第4页 / 共13页
shell编程if条件判断文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

shell编程if条件判断文档格式.docx

《shell编程if条件判断文档格式.docx》由会员分享,可在线阅读,更多相关《shell编程if条件判断文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

shell编程if条件判断文档格式.docx

shell的if与c语言if的功能上的区别

shellif

c语言if

0为真,走then

正好相反,非0走then

不支持整数变量直接if

必须:

if[i–ne0]

但支持字符串变量直接if

if[str]如果字符串非0

支持变量直接if

if(i)

=================================以command作为if条件===================================

以多条command或者函数作为if条件

echo–n“input:

readuser

多条指令,这些命令之间相当于“and”(与)

grep$user/etc/passwd>

/tmp/null 

who-u|grep$user

上边的指令都执行成功,返回值$?

为0,0为真,运行then

echo"

$userhaslogged"

else 

指令执行失败,$?

为1,运行else 

$userhasnotlogged"

#shtest.sh

input:

macg

macg 

pts/0 

May1515:

55 

2075(192.168.1.100)

macghaslogged

ddd

dddhasnotlogged 

以函数作为if条件 

(函数就相当于command,函数的优点是其return值可以自定义)

以函数作为if条件,

getyn

函数reture值0为真,走then

youranswerisyes"

函数return值非0为假,走else

youranserisno"

ifcommand 

等价于command+if$?

$vitestsh.sh

#!

/bin/sh

cat111-tmp.txt|grepting1

echofound

nofound"

fi

if[$?

-eq0]

echo$?

$shtestsh.sh

nofound 

1

nofound

$vi111-tmp.txt

thatis222file

thisting1is111file

found

========================================以条件表达式作为if条件=============================

传统if从句子——以条件表达式作为if条件

if[条件表达式]

条件表达式

∙文件表达式

if[-f 

file] 

如果文件存在

if[-d... 

如果目录存在

if[-sfile 

如果文件存在且非空 

if[-rfile 

如果文件存在且可读

if[-wfile 

如果文件存在且可写

if[-xfile 

如果文件存在且可执行 

∙整数变量表达式

if[int1-eqint2] 

如果int1等于int2 

if[int1-neint2] 

如果不等于 

if[int1-geint2] 

如果>

=

if[int1-gtint2] 

if[int1-leint2] 

如果<

if[int1-ltint2] 

∙ 

字符串变量表达式

If 

[$a=$b] 

如果string1等于string2

字符串允许使用赋值号做等号

[$string1!

$string2] 

如果string1不等于string2 

[-n$string 

如果string非空(非0),返回0(true) 

[-z$string 

如果string为空

[$sting] 

如果string非空,返回0(和-n类似) 

条件表达式引用变量要带$

if[a=b];

echoequal

echonoequal

[macg@machome~]$shtest.sh

inputa:

5

inputb:

noequal 

(等于表达式没比较$a和$b,而是比较和a和b,自然a!

=b)

改正:

if[$a=$b];

equal

-eq 

-ne 

-lt 

-nt只能用于整数,不适用于字符串,字符串等于用赋值号=

[macg@machome~]$vitest.sh

echo-n"

inputyourchoice:

"

readvar

[$var-eq"

yes"

]

echo$var

[macg@machome~]$sh-xtest.sh

y

line3:

test:

y:

integerexpression_r_r_rexpected

期望整数形式,即-eq不支持字符串

=放在别的地方是赋值,放在if[]里就是字符串等于,shell里面没有==的,那是c语言的等于

无空格的字符串,可以加"

"

也可以不加

reada

inputis$a"

if[$a=123];

then

echoequal123

123

inputis123

equal123 

=作为等于时,其两边都必须加空格,否则失效

等号也是操作符,必须和其他变量,关键字,用空格格开(等号做赋值号时正好相反,两边不能有空格)

if[ 

$var="

inputiscorrect"

inputerror"

$var="

在等号两边加空格

inputiscorrect

n

inputiscorrect 

输错了也走then,都走then,为什么?

因为if把$var="

连读成一个变量,而此变量为空,返回1,则走else

inputerror

no 

no

一切正常

$ANS 

等价于 

if[-n$ANS]

如果字符串变量非空(then),空(else)

readANS

if[$ANS]

echonoempty

echoempth

回车

empth 

说明“回车”就是空串

34

noempty 

整数条件表达式,大于,小于,shell里没有>

和<

会被当作尖括号,只有-ge,-gt,-le,lt

[$a-ge100];

echo3bit

echo2bit

3bit

20

2bit

整数操作符号-ge,-gt,-le,-lt,别忘了加-

test$a 

ge 

100;

line4:

ge:

binaryoperatorexpected

test$a-ge100;

============================逻辑表达式=========================================

逻辑非!

条件表达式的相反

if[!

表达式]

-d$num] 

如果不存在目录$num

逻辑与–a 

条件表达式的并列

if[表达式1 

–a 

表达式2]

逻辑或-o 

条件表达式的或

–o表达式2]

逻辑表达式

表达式与前面的= 

!

=-d–f–x-ne-eq-lt等合用

逻辑符号就正常的接其他表达式,没有任何括号(),就是并列

if[-z"

$JHHOME"

-a-d$HOME/$num]

注意逻辑与-a与逻辑或-o很容易和其他字符串或文件的运算符号搞混了

最常见的赋值形式,赋值前对=两边的变量都进行评测

左边测变量是否为空,右边测目录(值)是否存在(值是否有效)

[macg@mac-home~]$vitest.sh

:

inputthenum:

readnum

inputis$num"

-a-d$HOME/$num] 

如果变量$JHHOME为空,且$HOME/$num目录存在

JHHOME=$HOME/$num 

则赋值

JHHOMEis$JHHOME"

-----------------------

[macg@mac-home~]$shtest.sh

ppp

inputisppp

JHHOMEis

目录-d$HOME/$num 

不存在,所以$JHHOME没被then赋值

[macg@mac-home~]$mkdirppp

JHHOMEis/home/macg/ppp

一个-o的例子,其中却揭示了”=”必须两边留空格的问题

$ANS="

Yes"

-o$ANS="

-o$ANS="

y"

Y"

ANS="

n"

echo$ANS

为什么输入不是yes,结果仍是y(走then)

因为=被连读了,成了变量$ANS="

,而变量又为空,所以走else了

readANS 

$ANS="

-o$ANS="

-o$ANS="

yes

===================以 

test条件表达式作为if条件===================================

iftest$num-eq0 

if[$num–eq0]

test 

表达式,没有[ 

tryagain"

good"

mantest

[macg@machome~]$mantest

[

(1) 

UserCommands 

[

(1)

SYNOPSIS

testEXPRESSION

[EXPRESSION]

[-n]STRING

thelengthofSTRINGisnonzero 

-n和直接$str都是非0条件

-zSTRING

thelengthofSTRINGiszero

STRING1=STRING2

thestringsareequal

STRING1!

=STRING2

thestringsarenotequal

INTEGER1-eqINTEGER2

INTEGER1isequaltoINTEGER2

INTEGER1-geINTEGER2

INTEGER1isgreaterthanorequaltoINTEGER2

INTEGER1-gtINTEGER2

INTEGER1isgreaterthanINTEGER2

INTEGER1-leINTEGER2

INTEGER1islessthanorequaltoINTEGER2

INTEGER1-ltINTEGER2

INTEGER1islessthanINTEGER2

INTEGER1-neINTEGER2

INTEGER1isnotequaltoINTEGER2

FILE1-ntFILE2

FILE1isnewer(modificationdate)thanFILE2

FILE1-otFILE2

FILE1isolderthanFILE2

-bFILE

FILEexistsandisblockspecial

-cFILE

FILEexistsandischaracterspecial

-dFILE

FILEexistsandisadirectory

-eFILE

FILEexists 

文件存在

-fFILE

FILEexistsandisaregularfile 

文件存在且是普通文件

-hFILE

FILEexistsandisasymboliclink(sameas-L)

-LFILE

FILEexistsandisasymboliclink(sameas-h)

-GFILE

FILEexistsandisownedbytheeffectivegroupID

-OFILE

FILEexistsandisownedbytheeffectiveuserID

-pFILE

FILEexistsandisanamedpipe

-sFILE

FILEexistsandhasasizegreaterthanzero

-SFILE

FILEexistsandisasocket

-wFILE

FILEexistsandiswritable

-x

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1