当前位置: 首页 > news >正文

linux系统上shell脚本编写问题总结


需求背景:项目技术栈:Vue2+Nuxt2+TypeScript,是一个服务端渲染的项目,每次打测试包时需要在虚拟机上通过命令行打包项目,然后将打包生成的文件压缩为一个压缩包.tar.gz,然后将这个压缩包下载到本地,再由本地上传到测试服务器的指定目录下,在测试服务器上通过命令行解压文件,然后启动项目服务;

实现效果:通过虚拟机linux中的shell脚本自动打包指定git分支的前端项目代码,然后将打包生成的文件生成压缩包,并将这个压缩包推送到测试服务器指定目录下;然后在测试服务器上通过shell脚本解压对应缩包.tar.gz,并启动项目服务

1、编写shell脚本时遇到的问题:
1.1 执行.sh的shell脚本时,解压出来的文件名会自动带有问号,且这个问号在FTP工具中看不到,通过linux命令才能查看到

1.2 提示shell脚本中的\r命令未找到;如:./test.sh: line 1: $'\r': command not found

原因:因为我是通过MobaxXterm工具创建的shell文件,并且通过文本方式编写的脚本内容,存在换行的操作,这里的换行符和linux系统上的换行符存在差别,所以会提示如上的两个问题

解决方法:设置文件的格式类型为unix,或者去掉shell脚本中\r换行符;

# 方法一:设置文件的格式类型为unix
# 使用vi命令打开shell文件
vi test.sh
# 转换格式,设置文件的格式类型为Unix格式,
# 这意味着文件将使用Unix风格的换行符(LF)而不是Windows风格的换行符(CRLF)
:set ff=unix
# 保存文件
:wq# 方法二:去掉shell脚本中\r换行符
# 去掉test.sh文件中\r换行符然后生成新文件newtest.sh
sed 's/\r//g' test.sh > newtest.sh
# 给新生成的newtest.sh文件添加可执行权限,使其可以执行
chmod +x newtest.sh

2、常用的linux命令:

  • sshpass -p 'password' scp file1 username@xxx.xxx.xx.x:/file2,       
    • 将本地的file1文件推送到远程服务器xxx.xxx.xx.x的指定目录file2下,(使用sshpass提前输入远程服务器的密码,或者使用scp推送文件的时根据提示输入远程服务器密码)
      • 参数说明:
        • username:连接远程服务器的用户名
        • xxx.xxx.xx.x:远程服务器的IP地址
        • password:连接远程服务器时该用户名对应的明文密码
    • 注意:sshpass需要根据当前linux系统进行提前安装,安装教程可参考博客:sshpass的安装与使用-CSDN博客
  • su user                                                   切换的指定的user使用的用户
  • cat /etc/*-release                                    查看当前的linux系统
  • sed 's/\r//g' test.sh > newtest.sh            去掉test.sh命令文件中\r换行符生成新文件newtest.sh
  • chmod +x newtest.sh                             给新生成的.sh文件添加可执行权限
  • cp file1 file2                                            将file1文件拷贝到file2
  • ssh-keygen -t rsa -b 4096 -C "xxxx@emspost.com.cn"
    • 在linux系统上生成对应的ssh密钥
  • cat id_rsa.pub                                        查看id_rsa.pub公钥内容,将内容复制到github仓库下
  • mv file1 file2                                           对file1文件重命名成file2
  • tar -zxvf file1.tar.gz -C file2                     将file1.tar.gz压缩包解压到file2目录下
  • ps aux | grep 进程关键字                         查找指定进程的详细信息
  • kill  pid                                                      终止指定pid号的进程

3、使用vim命令编辑文件的步骤:

1)打开终端:在Linux系统上打开一个终端窗口

2)输入命令 vim  filename,打开要编辑的文件

3)按下Enter回车键,vim将会打开该文件并显示在终端中

4)开始编辑文件:

       4.1)按下 i 键进入插入模式,可以开始输入文本内容

        4.2)在插入模式中,输入想要添加的内容,

        4.3)编辑完毕后,可以按下 Esc 键退出插入模式,返回到普通模式

5)保存并退出文件:完成编辑后,可以执行以下命令来保存更改并退出vim

        5.1)在普通模式下,输入:w并按下Enter回车键来保存文件但不退出vim

        5.2)输入:q并按下Enter回车键 来退出vim,但不保存更改内容

        5.3)输入:wq 并按下Enter回车键,保存更改并退出vim;

相关文章:

  • 【ES】docker安装ES7.14.0+es-head
  • 通过SpringCloudGateway中的GlobalFilter实现鉴权过滤
  • 代码随想录第23天|回溯part3 组合与分割
  • 微服务学习Day8-Sentinel
  • Flink搭建
  • 【LeetCode】二叉树oj专题
  • elementplu父级页面怎么使用封装子组件原组件的方法
  • 【距离四六级只剩一个星期!】刘晓艳四级保命班课程笔记(2)(可分享治资料~)
  • 前端 html格式转md格式插件使用介绍
  • 解决JSON.stringify 方法在序列化 BigInt 类型时的错误
  • ardupilot开发 --- 机载计算机-软件方案 篇
  • 基于单片机的超声波倒车雷达设计
  • 汇舟问卷:国外问卷调查怎么样?
  • mysql like 查询优化
  • 遥感卫星影像处理流程
  • Android Studio:GIT提交项目到远程仓库
  • Android框架之Volley
  • angular学习第一篇-----环境搭建
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Hexo+码云+git快速搭建免费的静态Blog
  • java2019面试题北京
  • JSDuck 与 AngularJS 融合技巧
  • Material Design
  • MySQL的数据类型
  • PaddlePaddle-GitHub的正确打开姿势
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • spring学习第二天
  • sublime配置文件
  • 缓存与缓冲
  • 基于 Babel 的 npm 包最小化设置
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 写给高年级小学生看的《Bash 指南》
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • gunicorn工作原理
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​Python 3 新特性:类型注解
  • #APPINVENTOR学习记录
  • (Git) gitignore基础使用
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (PySpark)RDD实验实战——取一个数组的中间值
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (回溯) LeetCode 46. 全排列
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (十) 初识 Docker file
  • (算法)大数的进制转换
  • (算法二)滑动窗口
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (转)母版页和相对路径
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ***详解账号泄露:全球约1亿用户已泄露
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net 6.0 Windows平台如何判断当前电脑是否联网