之所以有这一篇文章,是因为之前我写过的一篇文章:“解决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. Java——动态生成POJO类

    package com.java.test.dynamicpojo; import java.io.ByteArrayOutputStream; import java.io.IOException; ...

  2. wordpress各种获取路径和URl地址的函数总结

    wordpress中的路径也不是很负责,有人为了让wordpress运行速度更快,就直接写了绝对地址,其实这样是很不好的,有可能别人修改了wordpress程序的地址,那么这样你编写的这个插件或者是主 ...

  3. 1700人点反对的LeetCode问题,是因为太难了吗?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第40篇文章,我们一起来看的是LeetCode中的71题Simplify Path,中文名是简化路径. 这题的难 ...

  4. Set接口中的HashSet,LinkedHashSet,TreeSet

    TestSet package com.aff.coll; import java.util.Comparator; import java.util.HashSet; import java.uti ...

  5. pandas删除DataFrame中任意字段等于'null'字符串的行

    删除df中任意字段等于'null'字符串的行: df=df.astype(str)#把df所有元素转为str类型 df=df[df['A'].isin(['null','NULL'])] #找出df的 ...

  6. 深度学习入门: CNN与LSTM(RNN)

    1. 理解深度学习与CNN: 台湾李宏毅教授的入门视频<一天搞懂深度学习>:https://www.bilibili.com/video/av16543434/ 其中对CNN算法的矩阵卷积 ...

  7. LM NTML NET-NTLM2理解及hash破解

    LM Windows Vista / Server 2008已经默认关闭,在老版本可以遇到,但根据windwos的向下兼容性,可以通过组策略启用它(https://support.microsoft. ...

  8. 04 . Mysql主从复制和读写分离

    Mysql AB复制 ​ AB复制又称之为主从复制,用于实现数据同步,实现Mysql的AB复制时,数据库的版本尽量保持一致,如果不能保持一致,最起码从服务器的版本要高于主服务器,但是就无法实现双向复制 ...

  9. DOM表单,下拉菜单和表格

    DOM访问表单控件的常用属性和方法如下: action 返回该表单的提交地址 elements 返回表单内全部表单控件所组成的数组,通过数组可以访问表单内的任何表单控件. length 返回表单内表单 ...

  10. Java实现 LeetCode 118 杨辉三角

    118. 杨辉三角 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: [ [1], [1,1], ...