- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个 shell 脚本来使用 sqlplus (oracle),在下面的代码部分:
#!/usr/bin/bash
################ Checking tables ###################
TABLES=$(sqlplus -s ${DBUSER}/${DBPASS}@${DBHOST} <<EOF
...
EOF
)
SuccessTabs=$TABLES
########## Export data from tables to file #########
for TABLE in $TABLES
do
echo "--- Processing $TABLE ---" >> $Log
FILE=$TABLE.csv
TotFiles=$TotFiles$FILE" " -------------------------> (1) Not understand this line ?
sqlplus -s ${DBUSER}/${DBPASS}@${DBHOST} <<EOF
...
SPOOL $FILE
Select ... FROM $TABLE;
SPOOL OFF
EXIT
EOF
return=$?
if [ $return != 0 ]
then
SuccessTabs=({$SuccessTabs[@]/$TABLE}) -------------> (2) Not understand this line ?
else
echo "--- $TABLE.csv process success ---" >> $Log
fi
done
echo "--- Process all tables success --- " >> $Log
echo "$SuccessTabs " >> $Log
FinalFile=FINAL_"_"${rundate}_${logtime}".csv"
echo "--- Merge all files into $FinalFile ---" >> $Log
cat $TotFiles > $FinalFile
问题是我有两个命令行,即使我从字面上知道它用于打印结果,但仍然不明白它的语法和机制。
(1) TotFiles=$TotFiles$FILE""
什么是末尾带空格的双引号以及为什么使用这样的语法?
(2) SuccessTabs=({$SuccessTabs[@]/$TABLE})
什么是[]
, @
, /
combine together for in this command 为什么这样的语法,特别是 [@]
,我想知道这是什么?
有人能帮我弄清楚吗?谢谢。
最佳答案
先说说[@]
。在 bash 中,您可以像这样声明一个数组:
declare -a testarray=('box' 'cat' 'dog')
您可以通过执行以下操作来回显 testarray 的内容:
echo ${testarray[@]}
结果:盒子猫狗
现在,让我们看一个有趣的行为:
echo ${testarray[@]/dog}
box cat
看看这里发生了什么?找到狗并将其替换为空。检查一下:
echo ${testarray[@]/dog/pig}
box cat pig
那只是用 pig 替换了狗。
因此,您的第二个问题的答案是,如果 SuccessTabs
数组包含与 $TABLE
中相同的文本,则该文本将被替换为空。结果被分配回变量 SuccessTabs
。
那么 TotFiles=$TotFiles$FILE""
在做什么?以相同的测试数组为例,让我们遍历它的所有值。
$ declare -a testarray=('box' 'cat' 'dog')
$ for item in ${testarray[@]}; do
> testvar=$testvar$item".."
> echo $testvar
> done
box..
box..cat..
box..cat..dog..
因此,在第一个循环中,$testvar
什么也不是。 $item
是 box
。 $testvar$item".."
是 box..
。此值分配给 testvar
变量。
在第二个循环中,$testvar
是 box..
。 $item
是 cat
。 $testvar$item".."
是 box..cat..
。此值分配给 testvar
变量。
在第三个循环中,$testvar
是 box..cat..
。 $item
是狗
。 $testvar$item".."
是 box..cat..dog..
。此值分配给 testvar
变量。
同样,如果 TABLES 是一个包含 box cat dog
的列表/数组,则在 TABLES 的每次迭代期间,$FILE 将是 box.csv、cat.csv 和 dog.csv。 TotFiles=$TotFiles$FILE""
将变为 box.csv cat.csv dog.csv
。
在两个地方查看更多示例:
我上面的例子可能不准确。目的是为您提供一个示例,说明如何获取您正在寻找的信息。
关于oracle - sqlplus shell脚本中方括号中的@(at符号)是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41113307/
我有一个脚本文件,它向 sqlplus 发送查询并将输出发送到其他一些输出文件。 但是,此输出文件包含来自 sqlplus 的一些信息 - 某种问候。 SQL*Plus: Release 11.2.0
我有一个使用连接详细信息调用 PLSQL 的批处理脚本,它工作正常,但我仍然必须在连接时显式地 SET DEFINE OFF。我想增强我的简单批处理脚本以将 SET DEFINE OFF 命令传递给
我正在尝试从java运行sql脚本(此处为memo_222dataFERG.out)并 try catch sqlplus窗口的输出。这是我的代码 Runtime rt = Runtime.getRu
有没有办法显示 sqlplus 命令的输出而不必先发出 spool off 命令? 我将 sqlplus session 的结果假脱机到文件,同时拖尾文件。这样做的原因是对于行很长的表,格式更容易从文
我在 .sql 文件中执行下面的脚本。我正在使用 Windows 命令行控制台来调用 sqlplus。当脚本终止时,一切看起来都不错,只是我看不到 INSERT 语句添加的记录数。您还可以在下面看到输
我被提供(由某些框架)在 sqlplus 中运行命令,但我自己没有启动它。 我想知道那个 sqlplus 运行的版本。 最佳答案 在 SQL*Plus 中,有一些预先定义的替换变量: SQL> def
为什么 execute immediate 'truncate table trade_economics'; 在 sqlplus 脚本中给出以下错误? BEGIN immediate 'trunc
在 windows 上使用 sqlplus 11g 在 11g 数据库上运行 sql 脚本。如果插入行留在脚本中,则 Sqlplus 会挂起。如果我注释掉插入行,脚本会返回记录。 在 sql deve
为什么 execute immediate 'truncate table trade_economics'; 在 sqlplus 脚本中给出以下错误? BEGIN immediate 'trunc
我必须为我的数据库类使用 SQLPLUS,我们的第一个作业是简单的保存。 我按照说明进行操作..(我正在使用 PuTTY 访问 sqlplus) “在本练习中使用以下 SQL 命令,并尝试使用 SAV
在 SQLPlus 中执行脚本时,我遇到了一个问题: script.sql 包含以下几行 @some_pkg.pks @some_pkg.pkb drop package some_pkg; / 调用
我有密码中的特殊字符问题 - '@'。 我不知道如何将带有这个特殊字符的密码传递给脚本文件并使用 sqlplus 连接的问题。 例如,我有用户“test_user”,密码为“temp123@”。对于通
我有一个用户表,我在其中查找名称为 john 的用户 ID select USER_ID from user where USER_ID like '%john%'; 我明白了 USER_ID ---
我在 bash 脚本中有以下内容。 inputsqls.txt 文件包含 10 个需要几个小时才能运行的 SQL 语句。有没有办法在所有 10 个语句运行之前定期将结果写入 output.txt?也就
抱歉,可能是一个非常愚蠢的问题,困扰着大家,但是我才刚刚开始学习数据库管理系统,今天我尝试了我的第一个sql类,必须通过提供我的登录详细信息进行登录,并学习了一些入门语法。但是我已经有了我的第一个sq
有没有办法让 sqlplus 可以打印它执行的语句。 我的意思是我有一些在 bash 脚本中运行的 .sql 文件。当我阅读日志文件时,我需要知道 sqlplus 运行了哪个语句。 例子: 假设我有这
我想知道 sqlplus 如何在连接语句“sqlplus/”中获取用户名和密码。 如果我想与不同用户的“sqlplus/”连接,我该如何更改配置。这可能看起来很尴尬,但在我的脚本中“sqlplus/”
我正在使用 shell 脚本来运行用 sql 脚本文件编写的 sql。在脚本文件中有一些绑定(bind)变量可以从shell 运行时参数。 这是我的代码。 result=`sqlplus -s ${D
我经常需要在我的一个数据库中的某个表上运行单个查询,如果不需要的话,我宁愿不必创建一个文件并将其作为脚本和所有内容调用。 我希望能够像这样将查询作为字符串直接发送到 sqlplus sqlplus u
我想删除表中的所有数据行,但不删除表。 delete 语句有一个 where 子句,所以我必须对每一行一一给出。有没有其他方法可以删除表中的整个数据行? 这是 Oracle并使用 sqlplus 最佳
我是一名优秀的程序员,十分优秀!