一个简单的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,进入我的目录,上传:下载的机器都要做: ...
随机推荐
- ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found
问题背景描述: 在做图片验证码识别安装 tensorflow 启动程序报错: ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' no ...
- 【Oracle】CentOS7/CentOS8命令行安装Oracle 11G R2
写在前面 很长一段时间内,国内互联网公司都在提倡"去IOE",但是很多企业还是愿意为昂贵的Oracle数据库买单,不少读者所在的公司也在用Oracle,很多读者自行安装Oracle ...
- 容器技术之Docker网络
上一篇博客我们主要聊了下docker镜像相关的说明以及怎样基于现有镜像制作镜像.分发镜像到docker仓库中的相关测试:回顾请参考https://www.cnblogs.com/qiuhom-1874 ...
- 新版Element-UI级联选择器高度位置不对的问题
在做电商后台管理系统项目事遇到的问题,可能视频是去年的,element现在已经是新版本了,有些地方修改了,从而导致了以下问题 级联选择器的位置不对 解决的方法就是在全局css中添加以下代码: .el- ...
- 转 document.compatMode介绍
对于document.compatMode,很多朋友可能都根我一样很少接触,知道他的存在却不清楚他的用途.今天在ext中看到 document.compatMode的使用,感觉这个对于我们开发兼容性的 ...
- pytest之fixture使用详解
简介: fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进: 1.有独立的命名,并通过声明它们从测试函数.模块.类或整个项目中的使用来激活. 2.按模块化的方 ...
- [json-server] RESTful API 中,取主数据时,同时获取多个关联子表的数据
项目背景: back-end:ASP.NET Core WebAPI front-end:Vue(+vue-router +vuex +axios)(webpack)(json-server + mo ...
- Python所有异常错误的父类--BaseException
BaseException # 所有异常的基类 +-- SystemExit # 解释器请求退出 +-- KeyboardInterrupt # 用户中断执行(通常是输入^C) +-- Generat ...
- 01 . Redis简介及部署主从复制
简介 Remote Dictionary Server, 翻译为远程字典服务, Redis是一个完全开源的基于Key-Value的NoSQL存储系统,他是一个使用ANSIC语言编写的,遵守BSD协议, ...
- 微信小程序路由跳转(navigateTo,redirectTo ,switchTab ,reLaunch )
navigateTo, redirectTo 只能打开非 tabBar 页面. switchTab 只能打开 tabBar 页面. reLaunch 可以打开任意页面. 通过redirect重定向的页 ...