先简单的写一下shell脚本的流程。
#创建一个sh文件nano yulisao.sh#编写shell脚本命令# 略,根据自己需要编写。示例如下#! /bin/shecho "请输入字母y "read yourdataif [ "Y" = ${yourdata} -o "y" = ${yourdata} ]then echo "你输入的是字母y"elseecho "你输入的不是字母y"fi# 赋可执行权限 755 或者 777chmod 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/shif [ $# -lt 7 ]; thenecho "${0}缺少必填参数,请检查"echo '参数:远程服务器地址 用户名 密码 端口 目录 本地目录 文件名' exit -1fi#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} ]thenecho "开始创建本地目录 ${LOCAL_DIR}"mkdir -p ${LOCAL_DIR}if [ $? -ne 0 ]thenecho "创建目录 ${LOCAL_DIR} 出错"exit -2fifi#上传文件lftp -u ${SERVER_USER},${SERVER_PASS} sftp://${SERVER_IP}:${SERVER_PORT}<<EOFset 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}byEOF
调用方式:
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、浮点型不支持
如果觉得《编写shell脚本-sftp上传文件》对你有帮助,请点赞、收藏,并留下你的观点哦!