shell编程 if_linux shell if语句

shell编程 if_linux shell if语句一、shell编程中条件表达式的使用if  #条件then Commandelse Commandfi   #别忘了这个结尾如果if语句忘了结尾fitest.sh:line14:syntaxerror: unexpectedendoffi二、if的三种条件表达式1.命令执行成功,等于返回0(比如grep,找到匹配);执行失败,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、shell编程中条件表达式的使用

if  #条件
then
 
Command
else
  Command
fi   #别忘了这个结尾

如果if语句忘了结尾fi
test.sh: line 14: syntax error: unexpected end of fi

二、if 的三种条件表达式

1.命令执行成功,等于返回0(比如grep ,找到匹配);执行失败,返回非0(grep,没找到匹配)
if
 
command
then

if
  函数
then

 

2.表达式结果为真,则返回0,if把0值引向then
if [ expression_r_r_r  ]    #方括号前后要有空格
then 

 

3. 表达式结果为假,则返回非0,if把非0值引向then
if test expression_r_r_r
then

 

三、[ ]&&  ——快捷if

[ -f”/etc/shadow” ] && echo “This computer uses shadowpasswors”
&&
可以理解为then,如果左边的表达式为真则执行右边的语句。

 

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

shell if:0为真,接着走then。不支持整数变量直接if [ i ],必须是if [ i –ne 0 ];但支持字符串变量直接if,如if [ str ],如果字符串非0则走then。

c语言if:正好相反,非0走then。支持变量直接if ( i )。

 

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

echo –n “input:”
read user

if    #多条指令,这些命令之间相当于“and”(与)
 
grep $user /etc/passwd >/tmp/null
  who -u | grep $user
then    #上边的指令都执行成功,返回值$?为0,0为真,运行then
 
 echo “$user has logged”
else     #指令执行失败,$?为1,运行else                           
  echo “$user has not logged”
fi 

 

# sh test.sh
input : macg
macg     pts/0        May1515:55   .          2075(192.168.1.100)
macg has logged
   
# sh test.sh
input : ddd
ddd has not logged

 

六、以函数作为if条件  (函数就相当于command,函数的优点是其return值可以自定义)

if    #以函数作为if条件
 
getyn
then    #函数reture值0为真,走then
 
echo ” your answer is yes”
else    #函数return值非0为假,走else
 
echo “your anser is no”
fi

 

七、ifcommand  等价于command+if $?

例1:

$ vi testsh.sh
#!/bin/sh
if
 
cat 111-tmp.txt | grep ting1
then
  echo “found”
else
  echo “no found”
fi

 

$ sh testsh.sh
no found

 

$ vi 111-tmp.txt
that is 222file
thisting1 is 111file

$ sh testsh.sh
thisting1 is 111file
found

例2:

$ vi testsh.sh
#!/bin/sh
cat 111-tmp.txt | grep ting1
if [ $? -eq 0 ]
then
 
echo $?
  echo “found”
else
  echo $?
  echo “no found”
fi

 

$ sh testsh.sh
1
no found

 

$ vi 111-tmp.txt
that is 222file
thisting1 is 111file

$ sh testsh.sh
thisting1 is 111file
0
found

 

八、   条件表达式

1.文件表达式

if [ -f  file]    如果文件存在
if [ -d …   ]    如果目录存在
if [ -s file  ]    如果文件存在且非空 
if [ -r file  ]    如果文件存在且可读
if [ -w file  ]    如果文件存在且可写
if [ -x file  ]    如果文件存在且可执行

 

2.整数变量表达式

if [ int1 -eq int2]    如果int1等于int2   
if [ int1 -ne int2 ]    如果不等于    
if [ int1 -ge int2 ]    如果>=
if [ int1 -gt int2 ]     如果>
if [ int1 -le int2 ]     如果<=
if [ int1 -lt int2 ]      如果<

 

3.字符串变量表达式

if  [ $a = $b]         如果a等于b,字符串允许使用赋值号做等号
if  [ $a !=  $b ]      如果a不等于b
if  [ -n $a ]             如果a非空(非0),返回0(true)  
if  [ -z $a  ]            如果a为空
if  [ $a]                 如果a非空,返回0(和-n类似)

4.-eq  -ne  -lt  -nt只能用于整数,不适用于字符串,字符串等于用赋值号=。同时由于shell里没有> 和< ,会被当作尖括号,整数条件表达式只有-ge, -gt,-le, lt。

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

6.= 作为等于时,其两边都必须加空格,否则失效!!!等号也是操作符,必须和其他变量,关键字,用空格格开(等号做赋值号时正好相反,两边不能有空格!!!)

例:

$ vi test.sh
echo “input your choice:”
read var
if [ $var=”yes” ]
then
 
 echo$var
  echo”input is correct”
else
  echo$var
  echo “input error”
fi

 

$ sh test.sh
input your choice:
yes
yes
input is correct

$ sh test.sh
input your choice:
n
n
input is correct 
输错了也走then,都走then,为什么?
因为if把$var=”yes”连读成一个变量,而此变量为空,返回1,则走else。

 

7.if  [  $ANS  ]等价于if [-n $ANS ]。如果字符串变量非空(then),空(else)。

 

九、逻辑表达式

1.逻辑非!                   条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $num]                        如果不存在目录$num

 

2.逻辑与–a                    条件表达式的并列
if [ 表达式1  –a  表达式2 ]

 

3.逻辑或-o                    条件表达式的或
if [ 表达式1  –o表达式2 ]

4.逻辑表达式补充说明

·        表达式与前面的=  != -d –f –x -ne -eq -lt等合用

·        逻辑符号就正常的接其他表达式,没有任何括号( ),就是并列
if [ -z “$JHHOME” -a -d $HOME/$num ]

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

十、以  test 条件表达式 作为if条件

if test $num -eq 0 等价于 if[ $num –eq 0 ]
test  表达式,没有[  ]

if test $num -eq0                
then
  echo “try again”
else
  echo “good”
fi

$ man test
[(1)                             UserCommands                            [(1)
SYNOPSIS
       test EXPRESSION
       [ EXPRESSION ]
       [-n] STRING
              thelength of STRING isnonzero          -n
和直接$str都是非0条件
       -z STRING
              thelength of STRING is zero
       STRING1 = STRING2
              thestrings are equal
       STRING1 != STRING2
              thestrings are not equal
       INTEGER1 -eq INTEGER2
              INTEGER1is equal to INTEGER2
       INTEGER1 -ge INTEGER2
              INTEGER1is greater than or equal to INTEGER2
       INTEGER1 -gt INTEGER2
              INTEGER1is greater than INTEGER2
       INTEGER1 -le INTEGER2
              INTEGER1is less than or equal to INTEGER2
       INTEGER1 -lt INTEGER2
              INTEGER1is less than INTEGER2
       INTEGER1 -ne INTEGER2
              INTEGER1is not equal to INTEGER2
       FILE1 -nt FILE2
              FILE1is newer (modification date) than FILE2
       FILE1 -ot FILE2
              FILE1is older than FILE2
       -b FILE
              FILEexists and is block special
       -c FILE
              FILEexists and is character special
       -d FILE
              FILEexists and is a directory
       -e FILE
              FILEexists                                 
文件存在
       -f FILE
              FILEexists and is a regular file     
文件存在且是普通文件
       -h FILE
              FILEexists and is a symbolic link (same as -L)
       -L FILE
              FILEexists and is a symbolic link (same as -h)
       -G FILE
              FILEexists and is owned by the effective group ID
       -O FILE
              FILEexists and is owned by the effective user ID
       -p FILE
              FILEexists and is a named pipe
       -s FILE
              FILEexists and has a size greater than zero
       -S FILE
              FILEexists and is a socket
       -w FILE
              FILEexists and is writable
       -x FILE
FILE exists and is executable

十一、if简化语句

最常用的简化if语句

1.  &&如果是“前面”,则“后面”
[ -f /var/run/dhcpd.pid ] && rm/var/run/dhcpd.pid    
检查文件是否存在,如果存在就删掉

2.  ||  如果不是“前面”,则”后面”
[ -f /usr/sbin/dhcpd ] || exit 0    
检验文件是否存在,如果存在就退出

3.   用简化 if 和$1,$2,$3来检测参数,不合理就调用help
[ -z “$1” ] &&help                 如果第一个参数不存在(-z  字符串长度为0 )
[ “$1” = “-h” ] &&help                        如果第一个参数是-h,就显示help

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170864.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 360认证得力数据恢复软件,摄影爱好者的救星

    360认证得力数据恢复软件,摄影爱好者的救星  我是一位计算机工作者,身边许多朋友也经常向我咨询一些电脑方面的问题,最为突出的问题就是如何恢复硬盘数据和sd卡,U盘数据,我用过许多软件,但从没有一款软件像得力数据恢复软件这么优秀,这话一点都不假。  第一,无毒,众所周知,一款软件好坏,无毒是最大的招牌,它是经过360,金山毒霸,百度杀毒,卡巴斯基,电脑管家,诺顿杀毒等主流杀毒软件认证的。干净实用。  第二,下载方便,可以经过该地址:h…

    2022年8月20日
  • ELK入门——ELK详细介绍(ELK概念和特点、Elasticsearch/Logstash/beats/kibana安装及使用介绍、插件介绍)

    ELK入门——ELK详细介绍(ELK概念和特点、Elasticsearch/Logstash/beats/kibana安装及使用介绍、插件介绍)主要参考链接ES内容大全(Elastic中国社区官方博客)ES视频教程(Elastic中国社区官方博客)Elastic相关软件和插件(官网)ES中文社区(讨论和提问)我的ELK专栏Linux操作(鸟哥的私房菜)Linux常用命令一、什么是ELK(端口9200)ELK学习总结——我们为什么要用ELK一般我们需要进行日志分析场景:直接在日志文件中grep、awk就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢

    2022年10月26日
  • LLDP简介

    LLDP简介1.1.1LLDP产生背景目前,网络设备的种类日益繁多且各自的配置错综复杂,为了使不同厂商的设备能够在网络中相互发现并交互各自的系统及配置信息,需要有一个标准的信息交流平台。LLDP(LinkLayerDiscoveryProtocol,链路层发现协议)就是在这样的背景下产生的,它提供了一种标准的链路层发现方式,可以将本端设备的信息(包括主要能力、管理地址、设备标识、接口标识等)组织成不同的TLV(Type/Length/Value,类型/长度/值),并封装在LLDPDU(Lin…

    2022年5月28日
  • MySQL存储过程(PROCEDURE)(一)「建议收藏」

    MySQL存储过程(PROCEDURE)(一)「建议收藏」一、定义与目的:定义:存储过程是数据库SQL语言层面的代码封装与重用(是数据库中存储复杂程序,以便外部程序调用的一种数据库对象);目的:我们为了完成特定功能的SQL语句集,经编译创建并保存在数

    2022年7月2日
  • 解决kali-linux更新源无法使用的问题(签名失效)

    解决kali-linux更新源无法使用的问题(签名失效)本来说是这个寒假好好学习一下渗透测试的,可随着了解的深入,发现渗透测试需要的知识储备太多了,因此好长时间都没有真正的去学习渗透工具的使用,今天上午装了一个kali,装上之后第一件事就是执行apt-getupdate&&apt-getupgrade,结果却出现了这样的错误我添加的是中科大的更新源,在浏览器中是可以正常打开的:debhttp://mirrors.ustc.ed

    2022年5月28日
  • (Java实现) N皇后问题[通俗易懂]

    (Java实现) N皇后问题[通俗易懂]n皇后问题是一个以国际象棋为背景的问题:在n×n的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后,即任意两个皇后都不能处于同一条横行、纵行或斜线上。蛮力法思想:解决n皇后问题的思想本质上就是蛮力法,生成所有可能的摆放情况,并判断该情况是否满足要求,我们以树结构来表示解决问题的方法。以4*4的棋盘为例,第0层的根节点为空白的棋盘,第1层为只在棋盘的第一行摆放的四种…

    2022年9月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号