之所以有这一篇文章,是因为之前我写过的一篇文章:“解决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. 二、HTML基础标签4个

    标题标签<h1> —— <h6> <!DOCTYPE html> <html> <head> <meta charset=" ...

  2. 【python 爬虫】fake-useragent Maximum amount of retries reached解决方案

    前言 在用fake-useragent的时候发生报错,fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reach ...

  3. vue中template的三种写法

    第一种(使用模板字符串)早期字符串拼接年代 <div id="app"></div> new Vue({ el: "#app", tem ...

  4. NO.4 CCS运行第一个demo(本地)

    前面介绍了基本的SDK内容,这次主要是本地实际应用CCS实现程序的运行. 首先我们进入CCS,我简单介绍下界面: 界面很简洁,通俗易懂(怎么跟STM32IDE这么像) 由于我们还不会写程序,我们先导入 ...

  5. leetcode198之打家劫舍问题

    问题描述: 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给 ...

  6. React面试题(超详细,附答案)

    生命周期 组件将要挂载时触发的函数:componentWillMount 组件挂载完成时触发的函数:componentDidMount 是否要更新数据时触发的函数:shouldComponentUpd ...

  7. Netty学习笔记(一) - 简介和组件设计

    在互联网发达的今天,网络已经深入到生活的方方面面,一个高效.性能可靠的网络通信已经成为一个重要的诉求,在Java方面需要寻求一种高性能网络编程的实践. 一.简介 当前JDK(本文使用的JDK 1.8) ...

  8. php实现ajax请求的方法

    php实现ajax请求的方法 Ajax页面:第一,了解底层逻辑,正是平常的1个提交在无刷新的条件下发出请求后完成回应,之后去针对你需要的条件来做动作. <!DOCTYPE html> &l ...

  9. 北京理工大学复试上机--2001A

    1.编写程序,计算下列分段函数 y=f(x)的值. y = -x + 2.5, 0 <= x < 2 y = 2 - 1.5 (x - 3) (x - 3), 2 <= x < ...

  10. ASP.NET Core 3.x API版本控制

    前言 一般来说需要更改我们API的时候才考虑版本控制,但是我觉得我们不应该等到那时候来实现它,我们应该有一个版本策略从我们应用程序开发时就开始制定好我们的策略,我们一直遵循着这个策略进行开发. 我们其 ...