Ubuntu Shell脚本编码问题

今天一同事在写一个数据库备份的shell脚本,在多次确定脚本代码无误的情况下,发现脚本输出的结果死活不正常。

/**
 * @author jenkiHuang
 * @email [email protected]
 * @version 20150407
 * /

#!/bin/bash
DATA_DIR="/home/oracle/bakup/data"
LOGS_DIR="/home/oracle/bakup/logs"
DELTIME=`date -d "7 days ago" +%Y%m%d`
BTM=`date "+%Y%m%d%H%M%S"`
FILENAME="$DATA_DIR$BTM.dmp"
echo "Starting bakup..."
echo $FILENAME

在对文件进行可执行权限设置后,执行脚本时输出

sudo ./oracleautobk.sh
Starting bakup...
.dmp0407165921akup/data

上面的第二条Echo语句明显不对,无奈在网上各种找资料,最后在Bing(很少用度娘搜索,Google搜索大家都懂的)中找到关于shell脚本编码的问题。原来那同事在编写脚本的时候不是用的vi编辑器直接编写。而是在windows上面用UE编写后,用ftp工具传到linux系统中。那么现在问题来了,在windows系统中编写的shell脚本的默认格式是dos而不是unix,所以造成输出结果不正确。

查看shell脚本的格式,用vi编辑shell脚本。然后输入":set ff?"如果输出结束是"fileformat=dos",则需要修改文件的格式

//修改文件格式,用vi打开shell脚本后输入
:set ff=unix
//然后保存退出

再次执行脚本文件,可以正确输出年月日格式的文件名

sudo ./oracleautobk.sh
Starting bakup...
/home/oracle/bakup/data20150407171543.dmp

所以在这看来,以后编写脚本还是直接在linux系统中使用vi编写更为实在。一来熟练了vi编辑器,二来还可以避免带来不必要的麻烦。

转载:http://www.jenkihuang.com/experience/2015/04/ubuntu-shell-charset.html

时间: 2024-11-06 20:22:27

Ubuntu Shell脚本编码问题的相关文章

ubuntu shell脚本出错 dash

今天在Ubuntu下调试代码,明明是正确的,却仍然报错,查了错误信息才知道:Ubuntu中默认不是bash,而是为了加快开机速度,使用了dash. dash中需要严格的语法,而且与bash语法不同.例如,bash中定义函数是使用function关键字的(function foo() {}),但在dash中没有该关键字,直接使用foo(){}定义.我的错误就是这样因为有了function而没有通过. 注意:在sh文件首行定义的“#!/bin/bash”,指的是在(文件具有x权限的前提下),shel

Linux系统Shell脚本编程

1. shell脚本概念:C语言编写的.命令解释器.编程语言. 是用户使用linux的桥梁. shell脚本语言非常擅长处理文本类型的数据. 2. shell脚本作用:自动化管理.监控管理.日志数据处理.自动数据备份. 3. shell脚本中的成分:注释.命令.shell变量.结构控制语句. 以行为单位  一行一行依次执行. (在shell脚本中可以出现任何在交互方式下可以使用的命令.) 4. 调用shell脚本的两种方式: (1)sh 脚本文件名 (2)./脚本文件名(需要有执行权限) 当执行

Ubuntu下shell脚本运行异常:bash和dash的区别

Ubuntu下我用bash到语法写了一个shell脚本(准确的说是把书上的脚本敲进电脑),在ubuntu下,用sh test.sh来运行,但是出现了意料之外到结果,比如echo -e "\nTest\n"到执行就不同,直接用sh test.sh运行,会打印出-e(作为字符串);而直接在终端中输入echo -e "\nTest\n"是不会输出"-e"的. 我就在想是什么原因,后来终于发现是Ubuntu下sh默认指向dash. echo $SHELL

ubuntu 用shell脚本实现将当前目录下所有目录中的某一类文件拷贝到同一目录下

当前目录下有一些文件和目录,其中每个目录里都有若干.txt文件, 现在要求在当前目录创建一个新目录all,且将那些目录所有.txt文件 都拷贝到目录all.在ubuntu12.04的shell脚本实现如下: #!/bin/sh # 提示信息 echo "start:" # 定义变量 dst=all pst=.txt # 复制文件到目标文件夹 if [ -d ${dst} ] then echo "${dst} existed" else echo "mkd

Ubuntu 设定壁纸自动切换的shell脚本

升级到Ubuntu14.04后,感觉bug的确比12.04少多了.顶部任务栏支持半透明效果,所以整个桌面也看上去漂亮了很多.这样的桌面也是值得瞎捣鼓一下的,想到换壁纸,但是没找到设定动态更换壁纸的选项,但手动修改配置文件的方法总是有的,本文的目的也在于此.(以下过程在Ubuntu14上进行,未测试其他版本!). 原理 右键桌面->更改桌面背景,如下图所示,在右侧缩略图中带有小钟表图标的就表示为动态切换的壁纸: 系统是通过读取这个文件来进行动态壁纸切换的: /usr/share/backgroun

ubuntu 用shell脚本实现将当前文件夹下全部文件夹中的某一类文件复制到同一文件夹下

当前文件夹下有一些文件和文件夹,当中每一个文件夹里都有若干.txt文件. 如今要求在当前文件夹创建一个新文件夹all,且将那些文件夹全部.txt文件 都复制到文件夹all.在ubuntu12.04的shell脚本实现例如以下: #!/bin/sh # 提示信息 echo "start:" # 定义变量 dst=all pst=.txt # 拷贝文件到目标目录 if [ -d ${dst} ] then echo "${dst} existed" else echo

Ubuntu系统编写shell脚本程序一次安装多个软件包

编写shell脚本程序一次安装多个软件,主要用于一些软件依赖环境配置. 1.shell脚本程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 2.当编辑好脚本后,还必须使其可执行. 使脚本可执行: chmod +x filename 3.然后,您可以通过输入: ./filename 来执行您的脚本. 如下: 下面是我安装NS3之前,安装NS3依赖的多个软件包: 1.在vi中编

LINUX SHELL脚本攻略笔记[速查]

Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述符和重定向 cat 数组和关联数组 alias date 调试脚本 函数和参数 管道 读取命令输出 read 字段分隔符和迭代器 循环 比较和测试 find xargs tr md5sum sha1sum 对目录进行校验 sort uniq tempfile split bash变量匹配切分 exp

Shell脚本,简单& 强大

摘自<码农增刊Linus与Linux>,章节:你可能不知道的Shell. 最近阅读完这本书,觉得其中有很多不错的内容,这是其中的一个Shell小甜点,拿来和大家一起分享一下,增加了一些我自己的测试内容.笔者写这个随笔,旨在分享和提高大家对Shell的兴趣. 阅读以下部分前,强烈建议读者打开一个shell 实验,这些都不是shell 教科书里的大路货哦:) 1. sudo !! 以root 的身份执行上一条命令.场景举例:比如Ubuntu 里用apt- get 安装软件包的时候是需要root 身