一个简单的Shell脚本(解决windows上文本在macos上乱码问题)
之所以有这一篇文章,是因为之前我写过的一篇文章:“解决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上乱码问题)的更多相关文章
- 一个简单的shell脚本
一个简单的shell脚本 一个简单的shell脚本 编写 假设我想知道目前系统上有多少人登录,使用who命令可以告诉你现在系统有谁登录: 1.[KANO@kelvin ~]$ who2.KANO tt ...
- 如何在linux下编写一个简单的Shell脚本程序
在了解了linux终端和其搭配的基本Shell(默认为bash)的基础下,我们就可以在终端中用vi/vim编辑器编写一个shell的脚本程序了 Shell既为一种命令解释解释工具,又是一种脚本编程语言 ...
- 自动化运维:(3)写一个简单的Shell脚本(案例)
一.需求 1.test.sh 脚本执行时候需要添加参数才能执行 参数和功能详情如下: 参数 执行效果 start 启动中... stop 关闭中... restart 重启中... * 脚本帮助信息. ...
- shell 脚本文件Windows传到Linux后编码问题
shell 脚本文件Windows传到Linux后编码问题 下面这个标红的位置出现,是由于脚本从Windows机器上直接传到linux文件格式不对导致的. cat -v a.sh help^M exi ...
- Linux系统学习笔记之 1 一个简单的shell程序
不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊. 一个简单的shell程序 shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步: ...
- .Net Core 跨平台:一个简单程序的多平台(windows、Linux、osx)发布
.Net Core 跨平台:一个简单程序的多平台(windows.Linux.osx)发布 .Net Core 3.0 已于2019年9月23日发布了,包含了一些新特性,具体参见Announcing ...
- 如何写一个简单的shell
如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...
- 一个简单的appium脚本
这是一个简单的appium脚本,测试amazon购物过程的,过程包括搜索商品,然后从结果列表中选取中意的商品,然后加入购物车,等等. 它是一个最原始的脚本,对测试元素.数据.报告等未作任何的封装,后面 ...
- [shell]用shell脚本将本地文件夹与ftp上的文件夹同步
需求说明 最近在AIX上做开发,开发机器在office网段,测试机器在lab网段,不能互相通讯,只能通过特定的ftp来传文件. 每次上传的机器都要做:登录ftp,进入我的目录,上传:下载的机器都要做: ...
随机推荐
- 初识Mysql 外键
1.创建学生表(主表) CREATE TABLE `stu` ( `stunum` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT N ...
- dsPIC单片机的CAN引脚设置
用单片机的引脚复用 查询芯片数据手册C1RX的寄存器为RPINR26.C1RXR=(设置为需要用到的引脚) 引脚设置为输入(C1RX),TRIS=1: C1TX需要用的引脚为RPn41,查询数据手册R ...
- win10下安装scrapy出现错误的处理
一.背景: 在win10的dos窗口下使用命令pip install scrapy安装scrapy时,出现“ error: Microsoft Visual C++ 14.0 is required. ...
- 深入理解JS:var、let、const的异同
目录 序言 var 与 let 的区别 作用域 重复声明 绑定全局对象 变量提升与暂存死区 let 与 const 异同 参考 1.序言 var.let 和 const 都是 JavaScript 中 ...
- FreeRTOS-为什么关中断之后切换进程?
https://mp.weixin.qq.com/s/S5HBH3RTo0B2irr8sGwDdw 一. 基本问题 FreeRTOS会在关键区即taskENTER_CRITICAL()和tas ...
- Scala - 语言专家 - Desugar Scala code
https://mp.weixin.qq.com/s/zwrG1MfUzXwtik7jotpQsA 介绍Intellij IDEA中的一个去除Scala语法糖的功能. 1. 去除 ...
- Linux(六)文件系统
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.根目录内容 1.概述 Linux系统中只有一个文件系统,以“/”作为根目录,从根目录出发可以找到任何 ...
- Java实现 蓝桥杯VIP 算法训练 整除问题
问题描述 编写一个程序,输入三个正整数min.max和factor,然后对于min到max之间的每一个整数(包括min和max),如果它能被factor整除,就把它打印出来. 输入格式:输入只有一行, ...
- Java实现 LeetCode 142 环形链表 II(二)
142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始 ...
- Java实现第九届蓝桥杯堆的计数
堆的计数 题目描述 我们知道包含N个元素的堆可以看成是一棵包含N个节点的完全二叉树. 每个节点有一个权值.对于小根堆来说,父节点的权值一定小于其子节点的权值. 假设N个节点的权值分别是1~N,你能求出 ...