日常工作中,经常编写一些shell命令或脚本以完成重复性操作,本文分享了最近用到的几例shell实用脚本。

1 特殊文件名的远程拷贝

服务器之间拷贝文件经常使用scp命令,其命令格式:

(1)scp filename [user@]host:dir
(2)scp [user@]host:dir1/filenamedir2

格式(1)将本地文件filename拷贝到远程服务器host的dir目录下,格式(2)将远程服务器host的dir1目录下的文件filename,拷贝到本地dir2目录下。

如果拷贝的文件名包含特殊字符,比如ecs-eos-base:1.0.tar,冒号:属于特殊字符。直接使用格式(1)的命令进行拷贝,命令将ecs-eos-base识别为主机名称而命令运行报错,如下:

[root@PHY91 docker]# scp ecs-eos-base:1.0.tar root@PHY94:/root/docker/
ssh: Could not resolve hostname ecs-eos-base: Temporary failure in name resolution

此时使用./表示当前目录即可解决该报错,命令如下:

[root@PHY91 docker]# scp ./ecs-eos-base:1.0.tar root@PHY94:/root/docker/
ecs-eos-base:1.0.tar 100% 84MB 172.7MB/s 00:00

使用./代表当前目录,scp命令就不会将ecs-eos-base识别为主机名称。

2 Base64编码和解码

在Centos或Redhat Linux操作系统中,如果要进行字符串的Base64编码和解码,可以使用base64命令即可简单实现。

(1)编码

[root@PHY91 ~]# echo "PHY91" | base64
UEhZOTEK

(2)解码

[root@PHY91 ~]# echo "UEhZOTEK" | base64 -d
PHY91

base64既可以编码解码字符串,也可以对文件内容进行编码和解码。-d参数是表示解码。

对文件编码解码命令如下:

[root@PHY91 test]# echo "12345" > test.txt

[root@PHY91 test]# base64 test.txt 
MTIzNDUK [root@PHY91 test]# base64 test.txt > test2.txt [root@PHY91 test]# more test2.txt
MTIzNDUK [root@PHY91 test]# base64 -d test2.txt
12345

3 版本号自增长的实现

使用docker build进行应用镜像构建时,为便于镜像版本管理,每次构建的镜像版本号会增加1。可以使用脚本实现版本号的自增1,首先创建一个version.txt文件,内容如下:

[eos@host-132 eos]$ more version.txt
1.0.0

获取版本号命令如下:

version=`cat version.txt`

版本号赋值给version变量。

版本号自动增加1,脚本命令如下:

echo $version | awk -F'.' '{print($1"."$2"."($3+1));}' > version.txt

命令说明:

(1)使用awk命令,分隔符为点“.”;

(2)$1,$2和$3分别是版本号的第1,2,3个数字;

(3)$3+1表示版本号增加1。

4 sed配置运行环境

在动静完全分离的web应用项目中,前端使用nginx部署静态资源即可,项目前端代码的基准URL(baseUrl)需要根据不同运行环境(开发、测试、生产)进行相应的修改,例如baseUrl赋值的js代码如下:

define(["jquery"], function ($) {
return {
//生产是prod.abc.com,测试是test.abc.com,开发是localhost
baseUrl: "http://localhost/",
...
}

在部署测试环境和生产环境的静态资源时,需要将baseUrl替换为test.abc.com和prod.abc.com。此时可以使用sed命令进行字符串替换,完整命令如下:

sed -i 's#"http://localhost/"#"http://prod.abc.com"#g' web-app/src/js/controllers/common.js

命令说明:

(1)common.js是定义baseUrl的公共文件;

(2)此处须使用#代替/,否则会报错(因为替换字符串和目录字符串都包含/字符)。

几例实用的Shell脚本的更多相关文章

  1. 分享两个实用的shell脚本

    各位,早上好啊~ 发现许久没有分享过技术文章了,今天分享两个部署项目时候比较实用的shell脚本 一键部署shell脚本 由于个人部署,会习惯把jar放到lib目录下面,如果你没有这个习惯,可以适当做 ...

  2. 实用的shell脚本面试题和答案

    1. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录. 答案 : 输出用户名,当前日期和时间,以及当前工作目录的命令就是logname,date,who i am和pwd. 现在,创 ...

  3. Shell脚本学习指南 [ 第一、二章 ] 背景知识、入门

    摘要:第一章介绍unix系统的发展史及软件工具的设计原则.第二章介绍编译语言与脚本语言的区别以及两个相当简单但很实用的Shell脚本程序,涵盖范围包括了命令.选项.参数.Shell变量.echo与pr ...

  4. Shell脚本实现检测某ip网络畅通情况,实战用例

    Shell脚本实现检测某ip网络畅通情况,实战用例 环境准备,linux shell 发送email 邮件:1.安装sendmailyum -y install sendmail安装好sendmail ...

  5. 实用脚本----Linux下Jdk和Tomcat自动安装shell脚本总结

    系统环境为:ubuntu 14.04 一.JDK 自动安装脚本 jdk自动安装bash shell脚本,截止今天(2014/10/15)亲测可用: sudo su #切换到root权限 mkdir / ...

  6. Shell脚本1-20例

    1.每天生成一个文件 描述:请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为)2017-07-05.log, 并且把磁盘的使用情况写到到这个文件中,(不用考虑cron ...

  7. 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---11

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  8. Shell脚本监控Linux某个后台进程,当进程死掉后重新启动服务,以httpd为例

    Shell脚本如下: vim monitor.sh #!/bin/bash while true # 无限循环 flag=`ps -aux |grep "httpd" |grep ...

  9. shell脚本中执行sql脚本并传递参数(mysql为例)

    1.mysql脚本文件 t.sql insert into test.t values(@name,@age); exit 2.shell脚本文件 a.sh  (为方便演示,与t.sql文件放在同一目 ...

随机推荐

  1. [CPP] Coding Style

    C++ Coding Style C++很多强大的语言特性导致它的复杂,其复杂性会使得代码更容易出现bug.难于阅读和维护. 由于,本人有一点点代码洁癖,所以依照Google的C++编程规范<G ...

  2. windows下的host文件在哪里,有什么作用?

    在Window系统中有个Hosts文件(没有后缀名),在Windows98系统下该文件在Windows目录,在Windows2000/XP系统中位于C:\Winnt\System32\Drivers\ ...

  3. PYTHON 爬虫笔记四:正则表达式基础用法

    知识点一:正则表达式详解及其基本使用方法 什么是正则表达式 正则表达式对子符串操作的一种逻辑公式,就是事先定义好的一些特定字符.及这些特定字符的组合,组成一个‘规则字符串’,这个‘规则字符串’用来表达 ...

  4. hdu 1106 排序 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1106 这个题目一开始以为是水题,就想着用来轻松轻松,谁知道改得我想吐!! 除了discuss 中的数据 ...

  5. struts2 学习日记1

    struts2 简介 struts2的前身可以说是framework.strut1作为当时很流行的框架,但是有很多的不足之处,framework出生后,它带来了很好的框架,但是很多人已经习惯了stru ...

  6. double转int时精度不一致问题

    float和double类型的主要设计目的是为了科学计算和工程计算.它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不应该 ...

  7. 使用Dubbo实现RPC调用

    启动Dubbo服务有2个方式,1是通过xml配置,2是通过注解来实现,这点和Spring相似. 采用XML配置如下: <?xml version="1.0" encoding ...

  8. css3 实现瀑布流

    掌握点: 1.column-count 把div中的文本分为多少列 2.column-width 规定列宽 3.column-gap 规定列间隙 4.break-inside: avoid; 避免元素 ...

  9. 机器学习之K-means算法

    前言            以下内容是个人学习之后的感悟,转载请注明出处~ 简介 在之前发表的线性回归.逻辑回归.神经网络.SVM支持向量机等算法都是监督学习算法,需要样本进行训练,且 样本的类别是知 ...

  10. Cannot resolve symbol 'log'

    IntelliJ IDEA 写实体类时使用toString报错,报异常: 原因:缺少commons-lang3-3.8.1.jar包. 下载路径:http://commons.apache.org/p ...