本文作者:云初冀北

bash if条件判断的使用

bash if条件判断的使用摘要: 在bash中,if是可以对语句做选择执行,做if条件测试有整数测试,字符测试,文件测试三种形式。if格式单分支语法if 条件; then语句1语句2... fi双分支语法if 条件...

?=bash中,if是可以对语句选择,做if条件测试整数测试,字符测试,文件测试三种形式。

if格式

分支语法

if 条件; then 语句1 语句2 ...  fi 

双分支语法

if 条件;then 语句1 语句2 else 语句2 fi 

多分支语法

if 条件1; then 语句1 语句2 elif 条件2; then 语句1 语句2 else 语句1 语句2 fi 

条件测试

if的判断条件具体可以有以下几种形式

[ exPress ][[ express ]]test expressbash命令(命令执行成功则执行语句)

[],[[]],test作用似,基本上在编写bash脚本时可以互换注意:[],[[]]位置;[1个空格+表达式+1个空格][[1个空格+表达式+1个空格]]

示例:bash命令做if条件

示例1:查看系统是否有hadoop用户,如果有返回UId和Shell,没有返回no

[root@node1 bash_test]# cat 17.sh  #!/bin/bash  if ID -u hadoop &> /dev/null;then     grep "^hadoop" /etc/passwd | cut -d: -f1,7 else     echo no fi [root@node1 bash_test]# ./17.sh  hadoop:/bin/bash

注意:

id -u hadoop &> /dev/null指令的作用是执行id -u hadoop将其回执丢掉(不在终端显示)bash命令做if条件时,当命令状态返回值为真即值为0时,条件满足:命令状态返回值1-255即条件不满足

命令状态返回值

我们可以使用$?查看上一条命令的命令状态返回值,命令成功执行返回0,失败执行返回1

[root@node1 bash_test]# id hadoop uid=4024(hadoop) gid=4024(hadoop) 组=4024(hadoop),4026(mygrp) [root@node1 bash_test]# echo $? 0 [root@node1 bash_test]# id hadoop111 id: hadoop111: no such user [root@node1 bash_test]# echo $? 

当然在bash脚本中,我们可以使用exit退出程序时,后面接的数字则代表命令执行情况。例如:exit 0代表执行成功,exit 1代表执行失败

整数测试

if条件测试是为了比较整数时,具体规则如下expressiON数值1 比较符号 数值2比较符号:大于 -gt大于或等于 -ge等于 -eq不等于 -ne小于 -gt小于或等于 -ge

示例1:读取一个参数,如果他小于10返回Yes,大于10返回No

[root@node1 bash_test]# cat 18.sh  #!/bin/bash  if [ $1 -lt 10 ];then   echo Yes else   echo No fi [root@node1 bash_test]# ./18.sh 5 Yes [root@node1 bash_test]# ./18.sh 11 No

注意:$1代表终端传入的第一个参数bash中位置变量有:$1,$2,$3&hellIP;$@ $* 显示所有位置变量$@ 五个字符串当成一个字符串显示$* 五个字符串各自显示$# 显示位置变量个数$? 保存刚刚执行命令的状态返回值shift 实现位置参数轮替结合shfit可以使用一个$1可以得到所有的变量shfit 2 指定轮替2个

例如:执行命令./18.sh 5$0为./18.sh$1为5@ 和 @和@和* 均为"./18.sh 5"$#为1

示例2:写一个脚本随机生成两个数,比较其大小

[root@node1 bash_test]# cat 19.sh  #!/bin/bash  A=$random B=$RANDOM result="" if [ $A -lt $B ];then   result="A is greater than B" elif [ $A -gt $B ];then   result="A is less then B" else   result="A equals B" fi echo "A = $A, B = $B, $result"  [root@node1 bash_test]# ./19.sh  A = 6646, B = 3889, A is less then B

$RANDOM 生成随机数 0-32767之间的数

字符测试

if条件为字符比较大小时,默认以ASCII码表做大小比较除了使用符号-lt,-gt,-le,-ge,-eq,-ne做判断,我们也可以使用下述符号做判断

> : 大于< : 小于== :等于!= :不等于单目测试-z $string 字符串的长度,为空则为真,非空为假-n $STRING 为空则为假,不空则真=~ 判断左边的字符串是否能够被右边的模式匹配,通常用于双[[ ]]中 一般用行首,行尾锚定$,不能用词首词尾锚定\< \> 不能用引号

一般我们用==比较多,用来判断两个字符串是否相等

示例1:写一个脚本,可以接受一个参数,其使用形式如下所示:script.sh {start|stop|restart|status}其中:如果参数为start,则创建空文件/var/lock/subsys/script,并显示“starting script successfully.”如果参数为stop,则删除文件/var/lock/subsys/script,并显示“Stop script successfully.”如果参数为restart,则删除文件/var/locksubsys/script并重新创建,而后显示“Restarting script successfully.”如果参数为status,那么:如果文件/var/lock/subsys/script存在,则显示“Script is running…”,否则,则显示“Script is stopped.”其他任何参数;则显示“script.sh {start|stop|restart|status}”

#!/bin/bash # echo $1 if [ $1 == "start" ];then if [ -e /var/lock/subsys/script ];then echo  "script is already running." else mkDIr /var/lock/subsys/script echo  "Starting script successfully." fi elif [ $1 == "stop" ];then if [ -e /var/lock/subsys/script ];then rm -rf /var/lock/subsys/script echo "Stop script finished." else echo "script is stopped yet." fi elif [ $1 == "restart" ];then rm -rf /var/lock/subsys/script mkdir /var/lock/subsys/script echo  "Restarting script successfully." elif [ $1 == "status" ];then if [ -e /var/lock/subsys/script ];then echo "script is running." else echo "script is stopped." fi else echo "script.sh {start|stop|restart|status}" fi

文件测试

对文件进行操作,主要有以下几种

单目测试-f 测试其是否为普通文件,即ls -l 时文件类型为-的文件 -d 测试其是否为目录文件,即ls -l 时文件类型为-的目录 -e 测试文件是否存在,存在为真 -r,-w,-x这三个都是判断文件权限,是否有读,写,执行权限 -s 测试文件大小是否不空,不空则真,空为假-l -b -c这三个判断文件是否为相应类型

示例:如果/tmp/test10不存在,则创建它

[root@node1 bash_test]# cat 21.sh  #!/bin/bash  if [ ! -e /tmp/test10 ];then     mkdir /tmp/test10 fi [root@node1 bash_test]# ls -ld /tmp/test10 ls: 无法访问/tmp/test10: 没有那个文件或目录 [root@node1 bash_test]# ./21.sh  [root@node1 bash_test]# ls -ld /tmp/test10 drwxr-xr-x 2 root root 6 8月   1 21:21 /tmp/test10

组合条件测试

当有多个判断需要做时,可以使用如下进行连接

符号符号意义示例解释-a与,符号左右两边都需要满足;[ $A > 300 -a $A < 500 ]A变量值大于300,而且要小于500满足条件-o或,符号左右两边只要满足一个;[ $B < 10 -o $A > 100 ]B变量小于10或者A变量小于100!非,将结果取反;[ ! id hadoop &> /dev/null ]如果没有hadoop用户则满足条件

如果使用独立命令做组合条件时,使用与&&,||或,!非

示例1:写一个脚本,给定用户,如果不存在退出脚本

[root@node1 bash_test]# cat 20.sh  #!/bin/bash  if ! id $1 > /dev/null;then echo "no find this user" exit 6 else id $1 fi [root@node1 bash_test]# ./20.sh hadoop uid=4024(hadoop) gid=4024(hadoop) 组=4024(hadoop),4026(mygrp) [root@node1 bash_test]# ./20.sh hadoop1 id: hadoop1: no such user no find this user 

示例2:通过参数传-一个字符串给脚本,如果传递的字符串为“memory"或"Memory",就以MB为单位显示当前主机内存信息:否则,就显示/pROC/uptime文件的内容。

#!/bin/bash  if [[ $1 == "memory" || $1 == "Memory" ]]; then    free -tm else    cat /proc/uptime fi 

注意:|| 短路操作,前面为真,不会运行后面&& 前面为假,无需运算后面

如果我们需要前面为假,运行后面程序,使用||如果我们需要前面为真,运行后面程序,使用&&

示例1:如果/tmp/test10不存在,则创建它

[ -e /tmp/test10 ] || mkdir /tmp/test10

示例2:如果/tmp/test10文件夹存在,则在该文件夹下创建hello文件

[ -d /tmp/test10 ] && touch /tmp/test10/hello

示例3:如果/tmp/test10/hello文件存在,则显示’exist’;不存在则显示’not exist’

[ -f /tmp/test10/hello ] && echo "exist" || echo "not exist"

到此这篇关于bash if条件判断的使用的文章就介绍到这了,更多相关bash if条件判断内容请搜索云初冀北以前的文章或继续浏览下面的相关文章希望大家以后多多支持云初冀北!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:Goliszhou@gmail.com
$

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,57人围观)参与讨论

还没有评论,来说两句吧...