Shell编程学习之if分支语句的应用

  • Shell编程中的if分支语句:
  • 伪代码表示:
  • 注意符号和表达式之间的空格;
if [ 表达式1 ]
then
     分支1
elif [ 表达式2 ]
then
     分支2
elif [ 表达式3 ]
then
     分支3
else
     其它
fi
  • 按整型的方式,if分支语句比较字符串的大小:
  • 等于:-eq
  • 不等于:-ne
  • 小于:-lt
  • 大于:-gt
  • 小于等于:-le
  • 大于等于:-ge
  • 方括号[ ]内部逻辑与运算:-a
  • 方括号[ ]外部逻辑与运算:&&
  • 方括号[ ]内部逻辑或运算:-o
  • 方括号[ ]外部逻辑或运算:||
  • 逻辑非运算:!
  • 测试代码:
#!/bin/bash

read -p "请输入数值1:" X
read -p "请输入数值2:" Y

if [ $X -gt 0 ] && [ $Y -gt 0 ]
then

	echo "两个大于0的数值"
	if [ $X -eq $Y ]
	then
	   echo "$X等于$Y"

	elif [ $X -gt $Y ]
	then
	   echo "$X大于$Y"

	else
	   echo "$X小于$Y"

	fi 

else
	echo "两个小于或着等于0的数值"
fi

  • 运行结果:
#第一次运行
请输入数值1:88
请输入数值2:99
两个大于0的数值
88小于99
#第二次运行
请输入数值1:99
请输入数值2:99
两个大于0的数值
99等于99
#第三次运行
请输入数值1:99
请输入数值2:88
两个大于0的数值
99大于88
#第四次运行
请输入数值1:-88
请输入数值2:-99
两个小于或着等于0的数值
  • if分支语句判断文件的类型:
  • 判断文件是否存在:-e
  • 判断文件是否非空:-s
  • 判断文件是否是块设备文件:-b
  • 判断文件是否是套接字文件:-S
  • 判断文件是否是管道文件:-p
  • 判断文件是否是普通文件:-f
  • 判断文件是否是链接文件:-L
  • 判断文件是否是字符设备文件:-c
  • 判断文件是否是目录文件:-d
  • 特别注意:
  • 判断文件类型时,若文件既是链接文件,又是普通文件时,优先判断链接文件;
  • 测试代码:
#!/bin/bash

read -p "请输入某文件名称:" FE

if [ -e $FE ]
then
	echo "该文件存在"
	if [ -s $FE ]
	then
		echo "该文件不是空的"
		if [ -L $FE ]
		then
			echo "该文件是链接文件"

		elif [ -f $FE ]
		then
			echo "该文件是普通文件"
		elif [ -d $FE ]
		then
			echo "该文件是目录文件"
		fi

	else
		echo "该文件是空的"
	fi
else
	echo "该文件不存在"
fi
  • 运行结果:
请输入某文件名称:f5.sh
该文件存在
该文件不是空的
该文件是普通文件
  • if分支语句判断文件的权限:
  • 判断文件是否有读权限:-r
  • 判断文件是否有写权限:-w
  • 判断文件是否有执行权限:-x
  • 特别注意:
  • 判断的是执行脚本者的权限;
  • 测试代码:
#!/bin/bash

read -p "请输入文件名:" FE

if [ -r $FE ]
then
	echo "有读权限"
else
	echo "没有读权限"
fi

echo "------------------------"
if [ -w $FE ]
then
	echo "有写权限"
else
	echo "没有写权限"
fi
echo "------------------------"
if [ -x $FE ]
then
	echo "有执行权限"
else
	echo "没有执行权限"
fi

  • 运行结果:
请输入文件名:f4.sh
有读权限
------------------------
有写权限
------------------------
没有执行权限
  • if分支语句判断文件的Inode的异同:
  • 所使用的选项:-ef
  • 终端查看Inode的命令:stat 文件名
  • 特别注意:
  • 不同为假,相同为真;
  • 硬链接文件Inode一致
  • 测试代码:
#!/bin/bash

read -p "请输入文件1名称" FE1
read -p "请输入文件2名称" FE2

if [ $FE1 -ef $FE2 ]
then

	echo "相同"

else

	echo "不同"
fi

  • 运行结果:
#第一次运行
请输入文件1名称f1.sh
请输入文件2名称f2.sh
不同
#第二次运行
请输入文件1名称f1.sh
请输入文件2名称f1.sh
相同
  • if分支语句对字符串的判断:
  • 判断字符串是否为空:-z
  • 判断字符串是否为非空:-n
  • 判断字符串是否相等:= OR ==
  • 判断字符串是否不等:!=
  • 判断字符串是否大小:\< OR \>
  • 特别注意:
  • 引用字符串时,要加双引号" ";
  • 测试代码:
#!/bin/bash


read -p "请输入字符串1:" STR1
read -p "请输入字符串2:" STR2

if [ -z "$STR1" ]
then

	echo "STR1空"

else

	echo "STR1不空"

fi

echo "--------------------------"

if [ -n "$STR2" ]
then

	echo "STR2不空"

else

	echo "STR2空"

fi
echo "--------------------------"

if [ "$STR1" == "$STR2" ]
then

	echo "STR1 = STR2"

elif [ "$STR1" \> "$STR2" ]
then

	echo "STR1 > STR2"
else

	echo "STR1 < STR2"
fi
  • 运行结果:
请输入字符串1:hello
请输入字符串2:helle
STR1不空
--------------------------
STR2不空
--------------------------
STR1 > STR2
  • if分支语句判断文件的时间戳:
  • 判断文件1是否比文件2更新:-nt
  • 判断文件1是否比文件2更旧:-ot
  • 特别注意:
  • 比较的是文件1和文件2的最后一次修改时间;
  • 测试代码:
#!/bin/bash

read -p "输入文件1的文件名:" FE1
read -p "输入文件2的文件名:" FE2

if [ $FE1 -nt $FE2 ]
then
	echo "文件1比文件2更新"
else
	echo "文件1比文件2更旧"
fi

echo "---------------------------"

if [ $FE1 -ot $FE2 ]
then
	echo "文件1比文件2更旧"
else
	echo "文件1比文件2更新"
fi
  • 运行结果:
#第一次运行
输入文件1的文件名:f1.sh
输入文件2的文件名:f2.sh
文件1比文件2更旧
---------------------------
文件1比文件2更旧
#第二次运行
输入文件1的文件名:f3.sh
输入文件2的文件名:f2.sh
文件1比文件2更新
---------------------------
文件1比文件2更新

你可能感兴趣的:(学习,shell,linux,ubuntu)