在 Shell 脚本中,要判断参数个数,可以使用特殊变量 $#
来获取传递给脚本或函数的参数个数。
if [ $# -eq 0 ]; then
echo "No arguments provided."
else
echo "Number of arguments: $#"
fi
在上述示例中,通过检查 $#
变量的值来判断是否有传递给脚本或函数的参数。如果参数个数为零,则打印 "No arguments provided.";否则,打印 "Number of arguments: " 后接参数个数。
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
参数。
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 替换为您要检查的的文件夹路径或者路径变量即可。
==
进行比较: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."。注意,在双等号 == 前后的字符串变量周围需要使用双引号引起来,以防止字符串中包含空格或特殊字符时出错。
=
进行比较:str1="hello"
str2="world"
if [ "$str1" = "$str2" ]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
与双等号 == 类似,使用单等号 = 也可以进行字符串比较。它们的作用是相同的。
注意:等号 = 或双等号 == 是 Shell 中用于字符串比较的运算符。不要与赋值运算符混淆。
在 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."。
注意:$?
变量的值仅表示上一个命令的退出状态码,而不是具体的错误信息。
如果需要获取更详细的错误信息,可以查阅命令的输出或者将命令的输出重定向到日志文件中。
在 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 的输入。通过使用管道符号,可以将一个命令的输出传递给另一个命令进行处理。可以根据需要在管道中连接多个命令。
使用 -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
变量是一个空字符串。可以将其替换为要检查的实际字符串变量。