shell--判断脚本执行时是否有传参、判断文件/文件夹是否存在、判断字符串是否相等、判断上个命令执行是否正常、判断字符串是否为空

一、判断脚本执行时是否有传参,或者判断传参个数

1、判断脚本执行时是否有传参,或者判断传参个数

在 Shell 脚本中,要判断参数个数,可以使用特殊变量 $# 来获取传递给脚本或函数的参数个数。

if [ $# -eq 0 ]; then
    echo "No arguments provided."
else
    echo "Number of arguments: $#"
fi

在上述示例中,通过检查 $# 变量的值来判断是否有传递给脚本或函数的参数。如果参数个数为零,则打印 "No arguments provided.";否则,打印 "Number of arguments: " 后接参数个数。

二、判断文件或文件夹是否存在

1、判断文件是否存
if [ -f "/path/to/file" ]; then
    echo "File exists."
else
    echo "File does not exist."
fi

上述示例中,将 /path/to/file 替换为要检查的实际文件路径。-f 参数用于检查路径是否为一个普通文件。如果文件存在,则打印 "File exists.";否则,打印 "File does not exist."

或者

if [[ -f "/path/to/file" ]]; then
    echo "File exists."
else
    echo "File does not exist."
fi

与方括号 [] 不同,[[ 提供了更多的功能和灵活性,并且在条件测试中更加常用。

或者

test 命令也可以直接用于条件判断。

注意:上述实例中的路径是示意路径,需要将其替换为要检查的实际文件路径。

如果要判断是否存在的是一个目录而不是一个文件,可以将 -f 参数替换为 -d 参数。

2、判断文件夹是否存在
if [ -d "relative/path/to/directory" ]; then
    echo "Directory exists."
else
    echo "Directory does not exist."
fi

在上述示例中,将 relative/path/to/directory 替换为您要检查的相对路径下的文件夹路径。-d 参数用于检查路径是否为一个目录。如果目录存在,则打印 "Directory exists.";否则,打印 "Directory does not exist."。

 或者

if [[ -d "relative/path/to/directory" ]]; then
    echo "Directory exists."
else
    echo "Directory does not exist."
fi

与方括号 [] 不同,[[ 提供了更多的功能和灵活性,并且在条件测试中更加常用。

或者

if test -d "relative/path/to/directory"; then
    echo "Directory exists."
else
    echo "Directory does not exist."
fi

test 命令也可以直接用于条件判断。

注意:以上示例中的路径是相对路径,相对于当前工作目录。需确保在脚本中正确设置工作目录或相对路径。如果要传入绝对路径或者路径的变量,将 relative/path/to/directory 替换为您要检查的的文件夹路径或者路径变量即可。

三、判断字符串是否相等

1、使用双等号 == 进行比较:
str1="hello"
str2="world"

if [ "$str1" == "$str2" ]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

在上述示例中,我们将 str1 和 str2 字符串进行比较。如果两个字符串相等,则打印 "Strings are equal.";否则,打印 "Strings are not equal."。注意,在双等号 == 前后的字符串变量周围需要使用双引号引起来,以防止字符串中包含空格或特殊字符时出错。

2、使用 = 进行比较:
str1="hello"
str2="world"

if [ "$str1" = "$str2" ]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

与双等号 == 类似,使用单等号 = 也可以进行字符串比较。它们的作用是相同的。
注意:等号 = 或双等号 == 是 Shell 中用于字符串比较的运算符。不要与赋值运算符混淆。

四、判断上个命令执行是否正常

1、判断上个命令执行是否正常

在 Shell 脚本中,可以使用特殊变量 $? 来判断上一个命令是否执行正常。该变量保存了上一个命令的退出状态码。

通常情况下,命令执行成功时会返回退出状态码 0,而执行失败时会返回非零的退出状态码。

command

if [ $? -eq 0 ]; then
    echo "Command executed successfully."
else
    echo "Command failed to execute."
fi

在上述示例中,首先执行了 command 命令。然后,通过检查 $? 变量的值来判断是否成功执行。如果退出状态码为 0,打印 "Command executed successfully.";否则,打印 "Command failed to execute."。

注意:$? 变量的值仅表示上一个命令的退出状态码,而不是具体的错误信息。

如果需要获取更详细的错误信息,可以查阅命令的输出或者将命令的输出重定向到日志文件中。

2、获取命令的输出

在 Shell 脚本中,有几种方法可以获取命令的输出:

使用反引号 (``) 或 $() 运算符:

output=`command`
echo "$output"

output=$(command)
echo "$output"

在上述示例中,command 为要执行的具体命令,然后使用反引号或 $() 运算符将其包裹起来。这将执行该命令并将其输出保存到 output 变量中。随后可以使用 echo 或其他方式来显示变量中的输出。

或者

使用重定向符号 >

command > output.txt

在上述示例中,command 为要执行的具体命令,并使用 > 重定向符号将其输出重定向到 output.txt 文件中。使用该方法,输出将不会直接显示在终端上。

或者

使用管道符号 |

command1 | command2

常见的:

        ls | grep 'work',查看当前目录下是否有work

        ps -ef | grep 'com.android',查看当前进程中是否存在android

在上述示例中,command1 的输出将成为 command2 的输入。通过使用管道符号,可以将一个命令的输出传递给另一个命令进行处理。可以根据需要在管道中连接多个命令。

五、判断字符串是否为空

1、在 Shell 脚本中,要判断字符串是否为空,可以使用以下方法:

使用 -z 参数:

str=""

if [ -z "$str" ]; then
    echo "String is empty."
else
    echo "String is not empty."
fi

在上述示例中,我们将 str 字符串设置为空字符串。然后,使用 -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 变量是一个空字符串。可以将其替换为要检查的实际字符串变量。

猜你喜欢

转载自blog.csdn.net/xch622114/article/details/131443581