先简单的写一下shell脚本的流程。

#创建一个sh文件
nano yulisao.sh
#编写shell脚本命令
# 略,根据自己需要编写。示例如下
#! /bin/sh
echo "请输入字母y "
read yourdata
if [ "Y" = ${yourdata} -o "y" = ${yourdata} ]
then 
echo "你输入的是字母y"
else
echo "你输入的不是字母y"
fi
# 赋可执行权限 755 或者 777
chmod 755 yulisao.sh
# 检查脚本(可省,无错则无返回,有错会显示错误信息)
sh -n yulisao.sh
# 执行脚本(无参数可省略参数)
sh yulisao.sh 参数1 参数2...

在这里插入图片描述

nano命令

nano是文本编辑器命令,打开/新建一个文件,回车后自动到了新建的文件里面,和vi/vim命令一样是编辑文本。因为是一个不存在的文件所以此处作用也类似 touch yulisao.sh 创建新文件并打开。
快捷命令Ctrl+
搜索 W 然后直接输入搜索内容回车,被搜到的内容被标记出来
保存 O 如有改动会询问是否保存,选Y会继续让你确认保存的文件名,改名则直接输入新文件名(即另存为),不改直接回车即可 (即原文件保存)
退出 X
粘贴 U
上一页 Y
下一页 V

注意点:

  • Linux系统大小写敏感
  • 空格不能少的不能省,注意检查
  • Window系统下写的脚本上传到Linux后最好改一下文件格式,不然运行时候容易出现unexpected end of file错误。因为在Window/dos下回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下回车键只输入“换行(LF)”,所以Window系统下写的sh文件在每行都会多了一个CR,到Linux下运行时就会报错找不到命令。
    设置方法: 首先编辑脚本 vi ***.sh 然后查看是否是unix格式,输入 :set ff 回车看左下角显示fileformat的值是dos还是unix,如果不是则输入 :set ff=unix 回车在 :wq! 保存即可。

下面写了一个sftp上传文件的shell脚本。可以通过命令执行或者利用java代码调用执行都方便些。

#!/bin/sh
if [ $# -lt 7 ]; then
  echo "${0}缺少必填参数,请检查"
  echo '参数:远程服务器地址 用户名 密码 端口 目录 本地目录 文件名'  
  exit -1
fi

#SFTP地址
SERVER_IP=${1}

#SFTP用户
SERVER_USER=${2}

#SFTP密码
SERVER_PASS=${3}

#SFTP端口
SERVER_PORT=${4}

#远程服务器目录
REMOTE_DIR=${5}

#本地服务器目录
LOCAL_DIR=${6}

#上传文件名
UPLOAD_FILE=${7}

#本地服务器目录如果不存在则创建
if [ ! -d ${LOCAL_DIR} ]
then
   echo "开始创建本地目录 ${LOCAL_DIR}"
   mkdir -p ${LOCAL_DIR}
   if [ $? -ne 0 ]
   then
      echo "创建目录 ${LOCAL_DIR} 出错"
      exit -2
   fi
fi

#上传文件
lftp -u ${SERVER_USER},${SERVER_PASS}  sftp://${SERVER_IP}:${SERVER_PORT}<<EOF
set net:timeout 5;
set net:max-retries:2;
set net:reconnect-interval-multiplier 1;
set net:reconnect-interval-base 5;
lcd ${LOCAL_DIR}
mkdir ${REMOTE_DIR}
cd ${REMOTE_DIR}
put ${UPLOAD_FILE}
by
EOF

调用方式:

sh sftpput.sh 192.168.1.1 sftp sftp 22 /home/sftp/test /home/opt/myfile test.txt

脚本内置参数如下:

$# 传递给脚本的参数个数  
$? 上一条脚本的执行结果,等于0表示成功,非0则不成功 
$* 传递给脚本的所有参数组成的字符串  
$n 传递给脚本的第n个参数,$1 表示第一个参数, 2 表 示 第 二 个 参 数 . . . 注 : 也 可 以 写 成 2 表示第二个参数 ... 注:也可以写成 2...{1},${2}… 10以上的必须用大括号这种格式。传参是从1开始的,因为$0固定是取当前脚本文件名
$$ 本脚本的PID(进程ID号)
$! 上一个命令的PID

if 条件判断

1、字符串判断
str1 = str2 等于
str1 != str2 不等与
-n str1 非空(长度大于0, -n 可省)
-z str1 空(长度等于0)
2、数字判断
int1 -eq int2 等于
int1 -ne int2 不等与
int1 -gt int2 大于
int1 -ge int2 大于等于
int1 -lt int2 小于
int1 -le int2 小于等于
3、文件判断
-r file 是否可读
-w file 是否可写
-x file 是否可执行
-f file 是否文件
-d file 是否目录
-s file 是否空文件(文件大小非0)
4、逻辑判断
-a 与
-o 或
! 非
5、浮点型不支持

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐