🦄 个人主页——🎐个人主页 🎐✨🍁
🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!🪁🍁🪁🍁🪁🍁🪁🍁
目录
一、关系运算符(数字比较符)
二、判断脚本执行时是否有传参,或者判断传参个数
2.1 判断脚本执行时是否有传参,或者判断传参个数
2.2 使用$1参数
三、判断文件或文件夹是否存在
3.1 判断文件是否存在
3.2 判断文件夹是否存在
四、判断字符串是否相等
4.1 使用双等号 == 进行比较
4.2 使用 = 进行比较
五、判断上个命令执行是否正常
5.1 判断上个命令执行是否正常
5.2 获取命令的输出
六、判断字符串是否为空
一、关系运算符(数字比较符)
在shell脚本中,我们经常在if语句中看到-ge、le等字样,下面我们看看这都是什么意思
-eq :equal(相等)
-ne :not equal(不等)
-gt :greater than(大于)
-ge :greater than or equal(大于或等于)
-lt :less than(小于)
-le :less than or equal(小于或等于)
运算符 | 说明 | 举例 | 含义 |
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 | //equals 等于 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 | //no equals 不等于 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 | //greater than 大于 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 | //less than 小于 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 | //greater equals 大于等于 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 | //less equals 小于等于 |
注意:
1、在shell中进行比较时,结果为0代表真,为1代表假。
2、-eq,-ne等比较符只能用于数字比较,有字符也会先转换成数字然后进行比较。
# 统计文件行数
rowNum=$(cat /var/log/cron | wc -l)
if [ $rowNum -ge 1 ] && [ $rowNum -le 100 ]; then
echo "1 - 100"
else
echo "大于100"
fi
执行结果:
二、判断脚本执行时是否有传参,或者判断传参个数
2.1 判断脚本执行时是否有传参,或者判断传参个数
在 Shell 脚本中,要判断参数个数,可以使用特殊变量 $# 来获取传递给脚本或函数的参数个数。
if [ $# -eq 0 ]; then
echo "没有参数."
else
echo "参数个数: $#"
fi
在上述示例中,通过检查 $# 变量的值来判断是否有传递给脚本或函数的参数。
2.2 使用$1参数
在shell中$1变量表示脚本的第一个参数。所以如果判断$1参数是空值,即可表示脚本没有参数
if [ "$1" ];then
echo "带参数";
else
echo "没有带参数 "
fi
执行结果:
三、判断文件或文件夹是否存在
3.1 判断文件是否存在
if [ -f "/var/log/messages" ]; then
echo "文件存在."
else
echo "文件不存在"
fi
上述示例中,将/var/log/messages 替换为要检查的实际文件路径。-f 参数用于检查路径是否为一个普通文件。
如下将判断改为"[[xxx]]"
if [[ -f "/path/to/file" ]]; then
echo "File exists."
else
echo "File does not exist."
fi
与方括号 [] 不同,[[ 提供了更多的功能和灵活性,并且在条件测试中更加常用。
test 命令也可以直接用于条件判断。
if test -e "/var/log/messages"
then
echo "文件存在."
else
echo "文件不存在"
fi
执行结果:
注意:上述实例中的路径是测试路径,需要将其替换为要检查的实际文件路径。
3.2 判断文件夹是否存在
如果要判断是否存在的是一个目录而不是一个文件,可以将 -f 参数替换为 -d 参数。
if [ -d "/path/to/directory" ]; then
echo "Directory exists."
else
echo "Directory does not exist."
fi
在上述示例中,将 /path/to/directory 替换为您要检查的相对路径下的文件夹路径。-d 参数用于检查路径是否为一个目录。
使用 test
if test -d "/path/to/directory"; then
echo "Directory exists."
else
echo "Directory does not exist."
fi
执行结果:
四、判断字符串是否相等
4.1 使用双等号 == 进行比较
str1="hello"
str2="hello"
if [ "$str1" == "$str2" ]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
注意,在双等号 == 前后的字符串变量周围需要使用双引号引起来,以防止字符串中包含空格或特殊字符时出错。
4.2 使用 = 进行比较
str1="hello"
str2="world"
str3="world"
str4="world"
if [ "$str1" = "$str2" ] && [ "$str3" = "$str4" ]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
执行结果:
五、判断上个命令执行是否正常
5.1 判断上个命令执行是否正常
在 Shell 脚本中,可以使用特殊变量 $? 来判断上一个命令是否执行正常。该变量保存了上一个命令的退出状态码。
通常情况下,命令执行成功时会返回退出状态码 0,而执行失败时会返回非零的退出状态码。
# 正确的 命令
java -version
echo $?
if [ $? -eq 0 ]; then
echo "Command executed successfully."
else
echo "Command failed to execute."
fi
在上述示例中,首先执行了 "java -verison" 命令。通过检查 $? 变量的值来判断是否成功执行。
注意:$? 变量的值仅表示上一个命令的退出状态码,而不是具体的错误信息。如下错误“java -version”
5.2 获取命令的输出
在 Shell 脚本中,可以获取命令的输出,使用反引号 (``) 或 $() 运算符:
file=/var/log/cron
num=$(cat ${file} | wc -l)
echo "$num"
num=`cat ${file} | wc -l`
echo "$num"
执行结果:
在上述示例中,获取文件文件行数并输出,使用了管道符号 “|”,我们可以拼接更多的命令。
六、判断字符串是否为空
在 Shell 脚本中,要判断字符串是否为空,可以使用以下方法:
使用 -z 参数
str="hello"
if [ -z "$str" ]; then
echo "String is empty."
else
echo "String is not empty."
fi
在上述示例中,我们定义str为hello。然后,使用 -z 参数来检查字符串是否为空。如果字符串为空,则打印 "String is empty.";否则,打印 "String is not empty."。
使用 -n 参数
str=""
if [ -n "$str" ]; then
echo "String is not empty."
else
echo "String is empty."
fi
与 -z 相反,使用 -n 参数可以检查字符串是否非空。如果字符串非空,则打印 "String is not empty.";否则,打印 "String is empty."。
使用字符串长度进行比较
str=""
if [ ${#str} -eq 0 ]; then
echo "String is empty."
else
echo "String is not empty."
fi
${#str} 表示获取字符串 str 的长度。使用 -eq 运算符来比较字符串长度是否为零。如果字符串长度为零,则打印 "String is empty.";否则,打印 "String is not empty."。
注意:在以上示例中,str 变量是一个空字符串。可以将其替换为要检查的实际字符串变量。
总结:字符串或者文件夹为空判断方式都有好多种,我们只需要掌握一种且能解决问题即可,也不用全部掌握。
参考链接:
shell关系运算符-eq -ne -gt -lt -ge -le的用法详解及实例 - 极客库
shell--判断脚本执行时是否有传参、判断文件/文件夹是否存在、判断字符串是否相等、判断上个命令执行是否正常、判断字符串是否为空_shell 判断参数-CSDN博客