100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > linux下划线后面加变量名 Shell中下划线_与变量的关系

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

时间:2021-04-26 14:51:10

相关推荐

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

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

#!/bin/sh

exportORACLE_SID=orcl

exportORACLE_BASE=/u01/app/oracle

exportORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

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

exportLANGNLS_LANG='SIMPLIFIEDCHINESE_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/$bakdbpasswddirectory=backDirdumpfile=$dumpbame_$timedate.dmplogfile=$bakdbname_$timedate.log

cd$bakdbhome

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

2、expdp$bakdbname/$bakdbpasswddirectory=backDirdumpfile=$dumpbame"_"$timedate.dmplogfile=$bakdbname_$timedate.log

cd$bakdbhome

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

3、expdp$bakdbname/$bakdbpasswddirectory=backDirdumpfile="$dumpbame"_"$timedate".dmplogfile="$bakdbname"_"$timedate".log

cd$bakdbhome

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

4、expdp$bakdbname/$bakdbpasswddirectory=backDirdumpfile=${dumpbame}_${timedate}.dmplogfile=${bakdbname}_${timedate}.log

cd$bakdbhome

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

输出的四个文件:

0815125435.dmp

public_ser_0815125435.dmp

public_ser_0815125435.dmp

public_ser_0815125435.dmp

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

用短横线:#!/bin/sh

exportORACLE_SID=orcl

exportORACLE_BASE=/u01/app/oracle

exportORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

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

exportLANGNLS_LANG='SIMPLIFIEDCHINESE_CHINA.AL32UTF8'

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

bakdbname=public_ser

bakdbpasswd=123

dumpbame=public_ser

bakdbhome=/u01/app/bak

expdp$bakdbname/$bakdbpasswddirectory=backDirdumpfile=$dumpbame-$timedate.dmplogfile=$bakdbname-$timedate.log

cd$bakdbhome

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

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

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

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

输出的文件为:

public_ser-0815125435.dmp

public_ser-0815125435.log

public_ser-0815125435.zip

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

说明:

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

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

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

#!/bin/sh

exportORACLE_SID=orcl

exportORACLE_BASE=/u01/app/oracle

exportORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

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

exportLANGNLS_LANG='SIMPLIFIEDCHINESE_CHINA.AL32UTF8'

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

bakdbname=public_ser

bakdbpasswd=123

dumpbame=public_ser

bakdbhome=/u01/app/bak

expdp$bakdbname/$bakdbpasswddirectory=backDirdumpfile=$dumpbame"_"$timedate.dmplogfile=$bakdbname"_"$timedate.log

cd$bakdbhome

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

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

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

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

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

[root@Linuxmybash]#b=b

[root@Linuxmybash]#echo$a$b

ab

[root@Linuxmybash]#echo$a_$b

b

[root@Linuxmybash]#echo$a\_$b

a_b

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

a_b

[root@Linuxmybash]#echo"$a"_"$b"

a_b

[root@Linuxmybash]#echo$a"_"$b

a_b

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。