linux下划线后面加变量名,Shell中下划线_与变量的关系
一个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中下划线_与变量的关系相关推荐
- linux下usb设备节点名不固定,解决Linux下USB设备节点ttyUSB名不固定的问题,生成固定USB转串口设备节点...
解决Linux下USB设备节点ttyUSB名不固定的问题,生成固定USB转串口设备节点 2018-09-19 http://blog.sina.com.cn/s/blog_8b58097f0102wx ...
- linux查看进程加载了哪些dll,linux下动态链接库的加载及解析过程
http://hi.baidu.com/hust_chen/blog/item/54a8c516231d0c0ec93d6d3e.html linux下动态链接库的加载及解析过程(ZZ) 2008-1 ...
- linux脚本查看系统内存,二个linux下查看内存使用情况的shell脚本()
摘要 腾兴网为您分享:二个linux下查看内存使用情况的shell脚本(),政务易,悦作业,优化大师,王者荣耀等软件知识,以及单向历app,优路教育app,kimoji,开关电源设计软件,皮皮高清影视 ...
- 您知道Linux下C语言编程的一些注意事项吗_教育中国
您知道Linux下C语言编程的一些注意事项吗_教育中国 云风的 BLOG: 一个 C 接口设计的问题 一个 C 接口设计的问题 C 语言在本质上,参数传递都是值传递.不像 Pascal 和 C++ 可 ...
- c语言指针赋值指针变量赋值吗,C语言_指针变量的赋值与运算,很详细
指针变量的赋值 指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值.未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机.指针变量的赋值只能赋予地址, 决不能赋予任何其它数据 ...
- linux下编辑aacc.sh脚本命令,Shell命令实战详解
1.按照指定的某段路径,进行数据拷贝. =>head Assembly.txt/ifs1/ST_ENV/USER/liyiyuan/liushanlin/1KITE_1_2/110817_I80 ...
- 【MySql】linux下,设置mysql表名忽略大小写
[障碍再现] 状况描述01: 在LINUX下调一个程序经常报出找不到表,但是我明明是建了表的, 测试的时候,遇到一些问题,从Windows平台访问虚拟机中的Web应用,经常报出找不到表,但自己明明在数 ...
- linux下开机自动启动,定时运行shell脚本
Shell 脚本与window/dos 下的批处理相似,也就是用各类命令预先放入一个文件中,方便一次性执行的的一个程序文件,主要是方便管理员进行设置或者管理用. 一.shell脚本 在Linux下,我 ...
- linux下C++base64加解密与图片互转
最近由于工作需要,需要处理由http传来的base64图片数据,特此做下记录也希望能帮到更多的朋友. 部分内容参考Andy____Li 的blog: https://blog.csdn.net/m0_ ...
最新文章
- java线程 kill linux_linux查看进程和线程的命令
- 语音识别框架最新进展——深度全序列卷积神经网络登场
- PC微信逆向:分析@群成员call
- HDU - 7084 Pty loves string kmp + fail树 + 主席树
- 命令行运行jmeter脚本
- sh脚本和bash脚本_我是如何开始使用bash脚本的
- Java 8 方法引用 (Method Reference)快速介绍与示例
- 用Scala实现简单的Web和API服务器
- 【服务器】【个人网盘】宝塔搭建cloudreve
- 【android免root脚本制作】自动坐标操作手机——京东金融程序金果摇钱树自动收金果
- 压力换算公斤单位换算_压力单位换算方法
- 如何实现 AppStore App 的自动下载
- 微服务流量卫兵 Sentinel
- Android - 简单的查看APP启动时间
- 如果在别人不知道的情况下,登录别人的快手会怎样?
- 台式电脑插入耳机听不到声音,排除耳机问题
- QT之远程控制对方电脑
- 网络营销复习题及答案
- 『力扣刷题』5238_找出给定方程的正整数解 解题代码
- 手把手MATLAB 简单连续信号表示 指数 正弦 抽样 矩形 三角波 信号
热门文章
- oracle 误删数据恢复
- python数字图像处理以及绘图
- 高纬度矩阵运算--NumPy
- 3D建模软件测试自学,收藏:5个自学3DMAX教程以及3D模型资源的网站
- 【转载】生产订单完工确认(CO11N) BAPI : BAPI_PRODORDCONF_CREATE_TT
- 东华大学2020考研计算机OJ题目解答分享——进阶篇(34)
- 让logo设计更有设计感的几个方法
- 关于YunFile网盘的一些使用技巧与心得
- JS中数组迭代方法(JavaScript从入门到疯癫)
- 汉字 计算机 坟墓,墓的拼音_墓组词_墓意思(解释)-常用汉字大全