首页 > 运维 > shell中判断远程服务器中文件是否存在两种场景实战
2021
11-19

shell中判断远程服务器中文件是否存在两种场景实战

判断一个文件的常见形式为

if [ -f "/data/file.txt"];then
    echo "true"
else
    echo "false"
fi

注意:

1)中括号之间的空格;

2)目录最好是绝对路径,在判断远程服务器中文件是否存在时尤为重要,因为集群之间有路径的变化。

-e filename 如果 filename存在,则为真
 -d filename 如果 filename为目录,则为真
 -f filename 如果 filename为常规文件,则为真
 -L filename 如果 filename为符号链接,则为真
 -r filename 如果 filename可读,则为真
 -w filename 如果 filename可写,则为真
 -x filename 如果 filename可执行,则为真
 -s filename 如果文件长度不为0,则为真
 -h filename 如果文件是软链接,则为真

判断远程服务器文件是否存在

    写法为:if [ ssh root@${ip} -f filename ]会报错: 【too many arguments】

    网上有文章介绍改为: if [ "ssh root@${ip} -f filename" ] 实战证明是不行的会报错 【 No such file or directory】

    实战正确的写法参考:  if ssh -p ${PORT} www@${node} "test -d ${REMOTE_DIR}/testdir";then

注意:

1)此处的双引号,不能换为单引号,因为双引号可以保留$字符的特殊功能;

2)双引号把 test及后面的命令引用起来,前面的ssh -p 做链接的时候不要引用


分享2种实战通过的案例

案例一:适合本机需要根据远程服务器的判断,本地还需要做一些操作的场景

Server_IP="
10.105.230.1
10.105.230.2
"
REMOTE_DIR=/data/nginx/webroot
LINK_DIR=/data/nginx/www
PORT=1234

deploy() {
  for node in ${Server_IP}; do
    if ssh -p ${PORT} www@${node} "test -d ${REMOTE_DIR}/testdir";then
      echo '软链切换成功'
      else
      echo '部署目录生成失败'
      fi  
  done    
}

也可以直接把命令到放到远程服务器上

案例二:本地不需要做一些操作,左右操作都在远程机器的场景

Server_IP="
10.105.230.1
10.105.230.2
"
REMOTE_DIR=/data/nginx/webroot
LINK_DIR=/data/nginx/www
PORT=1234

deploy() {
  for node in ${Server_IP}; do
    ssh -p ${PORT} www@${node} "if [ -d ${REMOTE_DIR}/testdir ];then
      rm -rf ${LINK_DIR}  && ln -sv ${REMOTE_DIR}/testdir ${LINK_DIR}
      echo '软链切换成功'
      else
      echo '部署目录生成失败' && exit 3
      fi"
  done
}


本文》有 0 条评论

留下一个回复