玖叶教程网

前端编程开发入门

每天2分钟学习unix/linux系统shell编程(十)-if条件判断详解

上一期介绍了for循环,这一期学习一下shell编程中的if条件判断。共分为以下几个章节:

  1. if语句的基本语法
  2. 条件判断有哪些
  3. 一种简单判真写法
  4. shell脚本中的if条件短路现象
  5. if语句举例(一)判断传入脚本的参数个数
  6. if语句举例(二)进程A的守护脚本
  7. if语句举例(三)字符串包含

一、if语句的基本语法

#单测试条件
if [ 测试条件1 ]; then
        执行语句1
elif [ 测试条件2 ]; then
        执行语句2
else
        执行语句3
fi

#多测试条件,并且
if [ 测试条件1 ] && [ 测试条件2 ]; then
        执行语句1
fi

#多测试条件,或者
if [ 测试条件1 ] || [ 测试条件2 ]; then
        执行语句1
fi

语法解释和注意事项:

  • 测试件两头必须有空格
  • if,then,elif,else,fi这些如果想写在同一行记得要加;号
  • elif语句块是可选
  • else语句块是可选
  • 测试条件1为真时执行语句1
  • 测试条件2为真时执行语句2
  • 两个条件都不符合则执行语句3
  • 多测试条件&&表示两边条件都为真执行语句1
  • 多测试条件||表示两边条件只要有一个为真就执行语句1
  • 测试条件中的变量最好加“”,养成好习惯
  • 所有的执行语句不能留空,最少要有一个;号。

二、条件判断有哪些

关于文件或者目录的基本测试条件:

测试类型

含义

[ -f file ]

如果file是一个普通文件则真

[ -e file ]

如果file存在则真

[ -d file ]

如果file是个目录则真

[ -r file ]

如果file拥有可读权限则真

[ -w file ]

如果file拥有可写权限则真

[ -x file ]

如果file拥有可执行权限则真

[ -L file ]

如果file是一个连接文件则真

关于字符串的基本测试条件:

测试表达式

含义

[ "str1" == "str2" ]

str1等str2则真

[ "str1" != "str2" ]

str1不等于str2则真

[ "str1" > "str2" ]

str1大于str2则真

[ "str1" < "str2" ]

str1小于str2则真

[ -z "str1" ]

str1如果是空也就是长度是0则真

[ -n "str1" ]

str1有长度不是空的则真

[[ "str1" =~ "str2" ]]

str1是否包含str2,注意此操作需要两个中括号,是二元表达式


关于数值的基本测试条件:

测试表达式

含义

[ n1 -eq n2 ]

n1和n2相等为真

[ n1 -ne n2 ]

n1和n2不等为真

[ n1 -gt n2 ]

n1大于n2为真

[ n1 -ge n2 ]

n1大于等于n2为真

[ n1 -lt n2 ]

n1小于n2为真

[ n1 -le n2 ]

n1小于等于n2为真

注意:关于数值的在bash环境下可以使用(())来实现条件判断,注意条件两端要加空格

  • (( n1 > n2 )) 表示n1大于n2时真
  • (( n1 >= n2 )) 表示n1大于等于n2时真
  • (( n1 < n2 )) 表示n1小于n2时真
  • (( n1 <= n2 )) 表示n1小于等于n2时真

逻辑判断基本测试语法:

测试表达式

含义

[ ! c1 ]

如果c1为真则结果为假,如果c1为假则结果为真,也就是取反的意思。

[ c1 -a c2]或者

[ c1 ] && [ c2 ]

这两种都表示c1和c2都为真时最终结果为真

[ c1 -o c2]或者

[ c1 ] || [ c2 ]

这两种都表示c1和c2只要有一个真时最终结果为真

四、shell脚本中的if条件短路现象

所谓短路现象就是利用多条件表达式,比如条件1 && 条件2,当条件1为真是才会执行条件2。否则结果为假不会执行条件2。例如下面的语句:

启动程序A && echo "run success"
cat file |grep "hello" && echo "hello is contain"
#同样相反的也可以
启动程序A || echo "run failed"
cat file |grep "hello" || echo "hello is not contain"

五、if语句举例(一)判断传入脚本的参数个数

直接上代码:

#!/bin/bash
if (( $# < 3 ));then
	echo "The number of parameters is less than 3"
	exit -1
fi
echo "parameters ok:$@"

把上面代码保存为test1.sh并给予可执行权限,直接运行不传参数会提示参数小3,如果OK则会输出parameters ok:和具体的参数,效果如下:

root@debian:~/test/20221121# ./test1.sh 2 3 4
parameters ok:2 3 4
root@debian:~/test/20221121# ./test1.sh 2 3
The number of parameters is less than 3
root@debian:~/test/20221121# 

六、if语句举例(二)进程A的守护脚本

直接上代码:

#!/bin/bash
cmd="sleep 5"
$cmd &
pid=$!
echo $pid
while :;do
	if ps -p $pid >/dev/null ;then
		echo "$pid is running"
		sleep 1
	else
		echo "$pid is not running"
		$cmd &	
		pid=$!
	fi
	
done

上面的例子稍微有点超纲了while循环后面会讲到,用sleep 5来表示进程A, $cmd &表示把进程A放入后台来执行。pid=$!意思是把上个命令执行的进程id给到pid变量。while :表示空语句,用意是while循环。if ps -p $pid >/dev/null表示把查找进程pid如果找到则睡眠1秒,如果没有找到则启动它记录下它的Pid,再次循环, >/dev/null是把找到的内容丢弃的意思。看效果:

root@debian:~/test/20221121# ./test2.sh 
8200
8200 is running
8200 is running
8200 is running
8200 is running
8200 is running
8200 is not running
8212 is running
8212 is running
8212 is running
8212 is running

七、if语句举例(三)字符串包含

#!/bin/bash
str1="abcd"
str2="bc"
[[ "$str1" =~ "$str2" ]] && echo true

最后这个例子就比较简单了,这一期先分享到这里,感谢大家支持。抽空再继续。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言