一个shell脚本根据日期和时间自动备份数据数据库的时候遇到一个问题$ vi /u01/app/bak/bin/public_serbak.sh

#!/bin/sh

export ORACLE_SID=orcl

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH:/sbin/

export  LANG NLS_LANG='SIMPLIFIED CHINESE_CHINA.AL32UTF8'

timedate=$(date +%Y%m%d%H%M%S)

bakdbname=public_ser

bakdbpasswd=123

dumpbame=public_ser

bakdbhome=/u01/app/bak

1、expdp $bakdbname/$bakdbpasswd directory=backDir dumpfile=$dumpbame_$timedate.dmp logfile=$bakdbname_$timedate.log

cd $bakdbhome

zip -r $dumpbame_$timedate.zip "$dumpbame_$timedate.dmp $bakdbname_$timedate.log

2、expdp $bakdbname/$bakdbpasswd directory=backDir dumpfile=$dumpbame"_"$timedate.dmp logfile=$bakdbname_$timedate.log

cd $bakdbhome

zip -r $dumpbame"_"$timedate.zip $dumpbame"_"$timedate.dmp $bakdbname"_"$timedate.log

3、expdp $bakdbname/$bakdbpasswd directory=backDir dumpfile="$dumpbame"_"$timedate".dmp logfile="$bakdbname"_"$timedate".log

cd $bakdbhome

zip -r "$dumpbame"_"$timedate".zip "$dumpbame"_"$timedate".dmp "$bakdbname"_"$timedate".log

4、expdp $bakdbname/$bakdbpasswd directory=backDir dumpfile=${dumpbame}_${timedate}.dmp logfile=${bakdbname}_${timedate}.log

cd $bakdbhome

zip -r ${dumpbame}_${timedate}.zip ${dumpbame}_${timedate}.dmp ${bakdbname}_${timedate}.log

输出的四个文件:

20180815125435.dmp

public_ser_20180815125435.dmp

public_ser_20180815125435.dmp

public_ser_20180815125435.dmp

不是应该四个都一样么,都是dumpbame_timedate的格式吗?

用短横线:#!/bin/sh

export ORACLE_SID=orcl

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH:/sbin/

export  LANG NLS_LANG='SIMPLIFIED CHINESE_CHINA.AL32UTF8'

timedate=$(date +%Y%m%d%H%M%S)

bakdbname=public_ser

bakdbpasswd=123

dumpbame=public_ser

bakdbhome=/u01/app/bak

expdp $bakdbname/$bakdbpasswd directory=backDir dumpfile=$dumpbame-$timedate.dmp logfile=$bakdbname-$timedate.log

cd $bakdbhome

zip -r $dumpbame-$timedate.zip $dumpbame-$timedate.dmp $bakdbname-$timedate.log

find $bakdbhome/*.log -mtime +10 -exec rm -rf {} \;

find $bakdbhome/*.zip -mtime +10 -exec rm -rf {} \;

find $bakdbhome/*.dmp -exec rm -rf {} \;

输出的文件为:

public_ser-20180815125435.dmp

public_ser-20180815125435.log

public_ser-20180815125435.zip

如果自动命名的文件的分隔符用短横线就没有问题,为什么会这样呢。

说明:

shell变量名后面要跟如下内容:非小写字符串(包括大小字符串)、数字或下划线,要么用转义字符“\”或者变量名用大括号。否则就会向本例中shell试图使用filename_作为变量名。除非出现$filename_已经存在的偶然情况,否则该语句不会打印任何内容(为null或空字符串),这就是第一次为什么输出的是文件 20130329的原因。

在shell中,取一个变量值的方法$varname的语法实际上是常用语法${varname}的简写形式,不管是避免歧义,还是增加可读性,变量加大括号都是一个很好的习惯,不要偷懒不加哟。

换成下划线:$ vi /u01/app/bak/bin/public_serbak.sh

#!/bin/sh

export ORACLE_SID=orcl

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH:/sbin/

export  LANG NLS_LANG='SIMPLIFIED CHINESE_CHINA.AL32UTF8'

timedate=$(date +%Y%m%d%H%M%S)

bakdbname=public_ser

bakdbpasswd=123

dumpbame=public_ser

bakdbhome=/u01/app/bak

expdp $bakdbname/$bakdbpasswd directory=backDir dumpfile=$dumpbame"_"$timedate.dmp logfile=$bakdbname"_"$timedate.log

cd $bakdbhome

zip -r $dumpbame"_"$timedate.zip $dumpbame"_"$timedate.dmp $bakdbname"_"$timedate.log

find $bakdbhome/*.log -mtime +10 -exec rm -rf {} \;

find $bakdbhome/*.zip -mtime +10 -exec rm -rf {} \;

find $bakdbhome/*.dmp -exec rm -rf {} \;

简易的例子:[root@Linux mybash]# a=a

[root@Linux mybash]# b=b

[root@Linux mybash]# echo $a$b

ab

[root@Linux mybash]# echo $a_$b

b

[root@Linux mybash]# echo $a\_$b

a_b

[root@Linux mybash]# echo ${a}_${b}   #推荐方法

a_b

[root@Linux mybash]# echo "$a"_"$b"

a_b

[root@Linux mybash]# echo $a"_"$b

a_b

linux下划线后面加变量名,Shell中下划线_与变量的关系相关推荐

  1. linux下usb设备节点名不固定,解决Linux下USB设备节点ttyUSB名不固定的问题,生成固定USB转串口设备节点...

    解决Linux下USB设备节点ttyUSB名不固定的问题,生成固定USB转串口设备节点 2018-09-19 http://blog.sina.com.cn/s/blog_8b58097f0102wx ...

  2. linux查看进程加载了哪些dll,linux下动态链接库的加载及解析过程

    http://hi.baidu.com/hust_chen/blog/item/54a8c516231d0c0ec93d6d3e.html linux下动态链接库的加载及解析过程(ZZ) 2008-1 ...

  3. linux脚本查看系统内存,二个linux下查看内存使用情况的shell脚本()

    摘要 腾兴网为您分享:二个linux下查看内存使用情况的shell脚本(),政务易,悦作业,优化大师,王者荣耀等软件知识,以及单向历app,优路教育app,kimoji,开关电源设计软件,皮皮高清影视 ...

  4. 您知道Linux下C语言编程的一些注意事项吗_教育中国

    您知道Linux下C语言编程的一些注意事项吗_教育中国 云风的 BLOG: 一个 C 接口设计的问题 一个 C 接口设计的问题 C 语言在本质上,参数传递都是值传递.不像 Pascal 和 C++ 可 ...

  5. c语言指针赋值指针变量赋值吗,C语言_指针变量的赋值与运算,很详细

    指针变量的赋值 指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值.未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机.指针变量的赋值只能赋予地址, 决不能赋予任何其它数据 ...

  6. linux下编辑aacc.sh脚本命令,Shell命令实战详解

    1.按照指定的某段路径,进行数据拷贝. =>head Assembly.txt/ifs1/ST_ENV/USER/liyiyuan/liushanlin/1KITE_1_2/110817_I80 ...

  7. 【MySql】linux下,设置mysql表名忽略大小写

    [障碍再现] 状况描述01: 在LINUX下调一个程序经常报出找不到表,但是我明明是建了表的, 测试的时候,遇到一些问题,从Windows平台访问虚拟机中的Web应用,经常报出找不到表,但自己明明在数 ...

  8. linux下开机自动启动,定时运行shell脚本

    Shell 脚本与window/dos 下的批处理相似,也就是用各类命令预先放入一个文件中,方便一次性执行的的一个程序文件,主要是方便管理员进行设置或者管理用. 一.shell脚本 在Linux下,我 ...

  9. linux下C++base64加解密与图片互转

    最近由于工作需要,需要处理由http传来的base64图片数据,特此做下记录也希望能帮到更多的朋友. 部分内容参考Andy____Li 的blog: https://blog.csdn.net/m0_ ...

最新文章

  1. java线程 kill linux_linux查看进程和线程的命令
  2. 语音识别框架最新进展——深度全序列卷积神经网络登场
  3. PC微信逆向:分析@群成员call
  4. HDU - 7084 Pty loves string kmp + fail树 + 主席树
  5. 命令行运行jmeter脚本
  6. sh脚本和bash脚本_我是如何开始使用bash脚本的
  7. Java 8 方法引用 (Method Reference)快速介绍与示例
  8. 用Scala实现简单的Web和API服务器
  9. 【服务器】【个人网盘】宝塔搭建cloudreve
  10. 【android免root脚本制作】自动坐标操作手机——京东金融程序金果摇钱树自动收金果
  11. 压力换算公斤单位换算_压力单位换算方法
  12. 如何实现 AppStore App 的自动下载
  13. 微服务流量卫兵 Sentinel
  14. Android - 简单的查看APP启动时间
  15. 如果在别人不知道的情况下,登录别人的快手会怎样?
  16. 台式电脑插入耳机听不到声音,排除耳机问题
  17. QT之远程控制对方电脑
  18. 网络营销复习题及答案
  19. 『力扣刷题』5238_找出给定方程的正整数解 解题代码
  20. 手把手MATLAB 简单连续信号表示 指数 正弦 抽样 矩形 三角波 信号

热门文章

  1. oracle 误删数据恢复
  2. python数字图像处理以及绘图
  3. 高纬度矩阵运算--NumPy
  4. 3D建模软件测试自学,收藏:5个自学3DMAX教程以及3D模型资源的网站
  5. 【转载】生产订单完工确认(CO11N) BAPI : BAPI_PRODORDCONF_CREATE_TT
  6. 东华大学2020考研计算机OJ题目解答分享——进阶篇(34)
  7. 让logo设计更有设计感的几个方法
  8. 关于YunFile网盘的一些使用技巧与心得
  9. JS中数组迭代方法(JavaScript从入门到疯癫)
  10. 汉字 计算机 坟墓,墓的拼音_墓组词_墓意思(解释)-常用汉字大全