在不知道其目的的情况下理解代码

时间:2012-09-27 09:41:50

标签: shell unix ksh teradata

我是unix中的新手。但我需要了解客户端给出的代码:(。我试图询问客户端有关代码的详细信息,例如代码应该做什么,但他自己也不知道。所以基本上我坚持使用我的目的代码不知道,但我必须了解它的作用>。<。 到目前为止,这是我能够从代码中做出的(以评论的形式)[1] [2] [3]等。 我对第[8]到[12]号评论有疑问/不知道。对于[1]到[7],我觉得大多数是正确的,但如果有任何错误,请随意指出。 一点背景:我应该在teradata工作,这可能与它有关。 我的评论是粗体{ *}

#!/usr/bin/ksh  **//[1] sets shell**        
set -x     **//[2]will this show the argument values before execution?**

l=$1       **//[3]$1,$2,$3 are the arguments with which this shell**
h=$2       **//is invoked.l= first argument h= second argument and**
k=$3       **//k=3rd argument.**

/export/home/someguy/daily_refresh/abc_mt_dt.ksh $l $h $k 
           **//[4] calling abc_mt_dt.ksh
             // with arguments l h and k**   

chmod 777 /export/home/someguy/daily_refresh/$k.txt 
           **// making $k.txt a read write n**
           **//executable.This im sure im right** 

while read line
   do
      echo $line |read a b c 
          **// [5] reads three values from keyboard and displays them as     
            //well as storing them in values a b and c**

      DATA_START_DT=$a 
          **// [6] variables DATA_START_DT DATA_END_DT ID set to the three** 
      DATA_END_DT=$b   **// values read from keyboard** 
      ID=$c

      echo $DATA_START_DT **//[7] displaying the values read from keyboard**
      echo $DATA_END_DT
      echo $ID

      rm -rf /export/home/someguy/daily_refresh/logs/abc_$DATA_END_DT.log 

      **//[8] rm -rf is to recursively remove files and folders .. 
          so what will this command do? will it remove all files and folders
          inside /export/home/someguy/daily_refresh/logs/ ?**

      bteq <<EOI > /export/home/someguy/daily_refresh/logs/abc_$DATA_END_DT.log 2>&1 

      **// [9] need explaination as to what this does.**
      .run file = /export/home/someguy/logon_caracal.bteq **//[10]**
      .MAXERROR 1; **//[11]**  
       DATABASE SOME_DATABASE; **//[12]**

2 个答案:

答案 0 :(得分:1)

[8] 不,它不会删除/export/home/someguy/daily_refresh/logs/中的所有文件和文件夹。它只会删除名为/export/home/someguy/daily_refresh/logs/abc_$DATA_END_DT.log的文件。

[9] 中,脚本执行bteq命令。

<< EOIhere document。下面的所有语句,直到包含单词EOI的行,都被传递给bteq程序。这些是bteq命令,而不是shell命令。 bteq程序的所有输出和错误都写入/export/home/someguy/daily_refresh/logs/abc_$DATA_END_DT.log

[10] 这是包含将要处理的SQL请求和bteq命令的文件。

[11] MAXERROR为1表示如果在处理过程中出现错误级别2或更高级别,bteq将退出。

答案 1 :(得分:1)

[10]它包含.LOGON命令和用于连接Teradata系统的凭据。 .LOGON TPDID/UserID, Password;

[11] MAXERROR表示一旦达到分配给MAXERROR的值,BTEQ脚本就会中止。

[12] DATABASE SOME_DATABASE设置会话的默认数据库,或者直到遇到下一个DATABASE命令。如果对象存在于默认数据库中,这允许开发人员避免使用{database}。{object}完全限定SQL。