之所以有这一篇文章,是因为之前我写过的一篇文章:“解决Mac上打开txt文件乱码问题”:传送门:

  https://www.cnblogs.com/chester-cs/p/11784079.html

  当时我们已经了解到乱码的问题是来源于文本在windows上和macos上的编码不同。前者是GB18030,后者是UTF-8。并且我们也解决了问题:使用命令行程序iconv。可是我每次想要进行文本转换的时候特别的麻烦:首先打开我的博客找到那篇文章(因为我记不住语法),然后在命令行里面键入命令,稍作修改。但是这样做很麻烦!于是我就在思考什么样操作能够改善这种情况呢?自然而然的想到使用shell脚本~

  这篇文章需要一些知识,没有这些知识你可能会一头雾水:

  https://www.cnblogs.com/chester-cs/p/11915339.html

  https://www.cnblogs.com/chester-cs/p/11863686.html

  先把脚本放上来,这是一段非常简单的脚本:

#! /bin/bash

# This is a shell script to transform the text-encoding in macos easily.
iconv -f GB18030 -t utf-8 "$1" > "$2"

  1. 文首的 #! /bin/bash 指定了这一段script要使用bash来运行。bash是shell的一种,用来和操作系统内核交互。

  2. # 后加注释

  3. 直接在.sh文件中键入命令,命令则会逐行被bash所执行。

  \$1 \$2 的意思在我提供的资料里有解释,在本题语境中他们代表着路径。但是我在这里遇见了一点小小的问题,因为我一开始写的是:

  \$1 > \$2,即没有双引号。但是这么做会出问题:

  Unix中的路径和文件名中最好都不要有空格(在macos中是可以有空格的,可能其他Unix系统更严格?)如果加入了空格,在键入文件名作为参数传给shell的时候,一定要在空格的前面加上反斜杠,这样shell才不会将之理解为多个参数。

  然而,在读入bash之后。\$1 \$2将路径解释成了字符串一样的东西,空格前面的反斜杠也被去除了,这样会造成iconv这个程序的困惑。

  查阅资料后找到了解决办法,就是在\$1 \$2前后加上双引号,这样做的原理是,Unix会将双引号里面的东西看成一个整体,这样存在空格就没事了,加反斜杠也是一个道理。

  比如:cd Desktop 和 cd "Desktop", 效果是一样一样的。

  文章到这里貌似应该结束了,脚本也有了,这样是不是方便了?No,这样不仅不方便,还很笨。为啥?难道每次运行ttrans.sh文件,都要先把它找到,然后在后面加上参数去使用?这不可能啊,太憨憨了。那么我们的做法是,将自己自定义的脚本放到/usr/local/sbin/文件夹中。这个文件夹会放置用户自己编写的脚本文件,当你运行脚本的时候,shell会自动在里面寻找同名的脚本。

  比如我们有GB18030编码的A.txt,我们只需在终端键入sh ttrans.sh [拖动文件A.txt到这,终端自动生成路径] [B.txt的路径,拖动目标文件夹到终端]

  这样就能方便的完成调用了,以后再也不用每次都回来找随笔了,是不是很实用?

一个简单的Shell脚本(解决windows上文本在macos上乱码问题)的更多相关文章

  1. 一个简单的shell脚本

    一个简单的shell脚本 一个简单的shell脚本 编写 假设我想知道目前系统上有多少人登录,使用who命令可以告诉你现在系统有谁登录: 1.[KANO@kelvin ~]$ who2.KANO tt ...

  2. 如何在linux下编写一个简单的Shell脚本程序

    在了解了linux终端和其搭配的基本Shell(默认为bash)的基础下,我们就可以在终端中用vi/vim编辑器编写一个shell的脚本程序了 Shell既为一种命令解释解释工具,又是一种脚本编程语言 ...

  3. 自动化运维:(3)写一个简单的Shell脚本(案例)

    一.需求 1.test.sh 脚本执行时候需要添加参数才能执行 参数和功能详情如下: 参数 执行效果 start 启动中... stop 关闭中... restart 重启中... * 脚本帮助信息. ...

  4. shell 脚本文件Windows传到Linux后编码问题

    shell 脚本文件Windows传到Linux后编码问题 下面这个标红的位置出现,是由于脚本从Windows机器上直接传到linux文件格式不对导致的. cat -v a.sh help^M exi ...

  5. Linux系统学习笔记之 1 一个简单的shell程序

    不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊. 一个简单的shell程序 shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步: ...

  6. .Net Core 跨平台:一个简单程序的多平台(windows、Linux、osx)发布

    .Net Core 跨平台:一个简单程序的多平台(windows.Linux.osx)发布 .Net Core 3.0 已于2019年9月23日发布了,包含了一些新特性,具体参见Announcing ...

  7. 如何写一个简单的shell

    如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...

  8. 一个简单的appium脚本

    这是一个简单的appium脚本,测试amazon购物过程的,过程包括搜索商品,然后从结果列表中选取中意的商品,然后加入购物车,等等. 它是一个最原始的脚本,对测试元素.数据.报告等未作任何的封装,后面 ...

  9. [shell]用shell脚本将本地文件夹与ftp上的文件夹同步

    需求说明 最近在AIX上做开发,开发机器在office网段,测试机器在lab网段,不能互相通讯,只能通过特定的ftp来传文件. 每次上传的机器都要做:登录ftp,进入我的目录,上传:下载的机器都要做: ...

随机推荐

  1. 移动端在ios上以及微信浏览器上的兼容性

    1.document.以及window.body在移动h5不能触发点击事件 解决方法:给body加上cursor: pointer;就可以有点击事件了. ios上默认的body是没有点击事件的: 接着 ...

  2. GO 使用Webhook 实现github 自动化部署

    通常大家开发大部分是本地git push 提交,服务器上git pull 手动更新.git 可以使用webhook实现自动部署.webhook是仓库平台的一个钩子事件,通过hook 钩子监听代码,回调 ...

  3. Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html

    Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html 1.前言 上一篇文章我开源了轮子,Asp.net Core 3.1 Razor视图模版动态渲染PDF,然后,很 ...

  4. 8.Hash集合类型操作使用

    数据类型Hash (1)介绍 hash数据类型存储的数据与mysql数据库中存储的一条记录极为相似 Redis本身就类似于Hash的存储结构,分为key-value键值对,实际上它的Hash数据就好像 ...

  5. MySQL死锁系列-常见加锁场景分析

    在上一篇文章<锁的类型以及加锁原理>主要总结了 MySQL 锁的类型和模式以及基本的加锁原理,今天我们就从原理走向实战,分析常见 SQL 语句的加锁场景.了解了这几种场景,相信小伙伴们也能 ...

  6. Python 每日一练(2)

    引言 我又双叒叕的来啦,新博客的第二篇文章,这次是继之前公众号上每日一练的第二个,这次是专题实对于文件的一些处理的练习 主要有以下几类: 1.实现英文文章字频统计 2.统一剪裁某一指定目录下的所有图片 ...

  7. JAVA WEB EL表达式注入

    看猪猪侠以前的洞,顺便总结下: 一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的we ...

  8. Matlab GUI程序设计入门——信号发生器+时域分析

    背景:学习matlab gui编程入门,完成一个基于GUIDE的图形化界面程序,结合信号生成及分析等. 操作步骤: 1.新建程序 新建一个GUIDE程序 这里选择第一个选项,即创建一个空白的GUIDE ...

  9. IDEA 插件推荐 —— 让你写出好代码的神器!

    概述 今天介绍的插件主要是围绕编码规范的.有追求的程序员,往往都有代码洁癖,要尽量减少代码的「坏味道」. 代码静态检查是有很多种类,例如圈复杂度.重复率等.业界提供了很多静态检查的插件来识别这些不合规 ...

  10. 03 . Nginx日志配置及日志切割

    Nginx日志 日志对于统计排错来说是非常有利的,Nginx日志主要分为两种: access_log(访问日志)和error_log(错误日志),通过访问日志可以得到用户的IP地址.浏览器的信息,请求 ...