ars*_*nal 0 linux shell bash ubuntu
我有一个下面的 shell 脚本,它将从 machineB 和 machineC 中的当前目录中获取最新的文件夹。所以我想出了下面的命令,它会在里面找到最新的文件夹 -
/bat/data/snapshot
最新的文件夹将采用 YYYYMMDD 的形式。下面是我的 shell 脚本 -
#!/bin/bash
readonly FILERS_LOCATION=(machineB machineC)
readonly MAPPED_LOCATION=/bat/data/snapshot
dir1=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[0]} ls -dt1 "$MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | head -n1)
dir2=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[1]} ls -dt1 "$MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | head -n1)
echo $dir1
echo $dir2
length1=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[0]} "ls '$dir1' | wc -l")
length2=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[1]} "ls '$dir2' | wc -l")
echo $length1
echo $length2
if [ $dir1 eq $dir2 ] && [length1 > 0] && [length2 > 0]
then
echo "Hello World"
Run Code Online (Sandbox Code Playgroud)
现在我需要编写条件 if 语句。我需要检查是否dir1
等于dir2
和length1
大于0
并且length2
也大于0
然后只打印输出Hello World
但不知何故,我上面的 if 语句不起作用。知道我在这里做错了什么吗?我在 bash 脚本方面有点生疏..
它应该是
if [ "$dir1" = "$dir2" ] && [ "$length1" -gt 0 ] && [ "$length2" -gt 0 ]
Run Code Online (Sandbox Code Playgroud)
请记住,变量名必须以$
s开头。必须使用 来完成字符串相等比较=
,而应该使用命名算术运算符(如 )来完成数字比较-gt
。见help test
。
请注意,(通常)应该避免使用-o
和-a
测试运算符,因为[
当涉及它们时无法可靠地解析其参数,并且操作数看起来像运算符。请改用&&
和||
shell运算符。