运行时将 txt 文件作为参数传递给脚本

运行时将 txt 文件作为参数传递给脚本

我有一个如下的脚本

    for File in $(cat $IMPORT_PATH/*.txt); do
         echo `date +'%m-%d-%Y %H:%M:%S'` "starting $File execute" > $Import_Success_Log
        ./cli.sh -a execute -i IPROD_$File -fn formrnt -user -password>> $Import_Success_Log
         echo `date +'%m-%d-%Y %H:%M:%S'` "$File execute completed" >> $Import_Success_Log
    done

    ./cli.sh -authfile "$AuthFile" -a list -t area -nof > $Import_List_File


for File in $(cat $IMPORT_PATH/*.txt); do
     imp_area=`grep -iw "PRD_$File" "$IGC_Import_List_File" | grep -i prod`;

           ##Testing if imp_area variable has a value
    if [ -z "$imp_area" ]; then
       echo "- $DataBase Imp Area is not present .Please create." >> $Import_Failure_Log
     else
          Preview=`grep -iB 3 "The admin setting require" $Import_Success_Log |head -1 | awk '{print $4}'`;
      Error=`grep -i error $Import_Success_Log`;
      No_Import=`grep -i "does not exist" $Import_Success_Log`;
         if [ -z "$Preview" -a -z "$Error" -a -z "$No_Import" ];then
        echo "<li> $DataBase </li>" >> $DB_Import_Complete
     else
        echo "- $Prev is not imported as this database require a preview.  >> $Import_Failure_Log
       fi
        fi
done

该脚本检查特定路径中的 txt 文件并执行特定命令。

现在,由于该路径中可能有许多 txt 文件,因此每次我都必须将其他文件重命名为 .txt 以外的文件。

因此,我想将 txt 文件作为变量/参数传递给脚本。

如下所示:sh script.sh abc.txt。

示例文件内容:File.txt

SQL_SEVRER_ACCOUNT
Customer_DB
Customer_support_DB
Account_DB

或者在计划脚本时作为 crontab 条目的参数。

我是脚本编写新手,对此没有太多想法。

答案1

根据您更新的问题进行更新

要从作为参数传递的文件中读取数据库,可以使用

for File in $(< "$1"); do
    echo `date +'%m-%d-%Y %H:%M:%S'` "starting $File execute" > $Import_Success_Log
    ./cli.sh -a execute -i IPROD_$File -fn formrnt -user -password>> $Import_Success_Log
    echo `date +'%m-%d-%Y %H:%M:%S'` "$File execute completed" >> $Import_Success_Log
done

(对于所有其他循环也类似)

然后将其称为

sh your-script file.txt

可以使用参数调用脚本,这些参数将在 等中可用$1$2因此,在您的情况下,您可以这样做

File="$1"
echo `date +'%m-%d-%Y %H:%M:%S'` "starting $File execute" > $Import_Success_Log
./cli.sh -a execute -i "IPROD_$File" -fn formrnt -user -password>> $Import_Success_Log
echo `date +'%m-%d-%Y %H:%M:%S'` "$File execute completed" >> $Import_Success_Log
./cli.sh -authfile "$AuthFile" -a list -t area -nof > $Import_List_File

imp_area=`grep -iw "PRD_$File" "$IGC_Import_List_File" | grep -i prod`;

然后将脚本调用为

sh your-script filename

PS:这假设在脚本的其余部分(尤其是在代码片段之前执行的部分), 的值$1不会因任何原因而更改。

答案2

如果您使用参数执行脚本,这些参数会自动存储在变量 $1、$2、$3、... 中

因此,如果您将脚本执行为:

sh script.sh abc.txt

然后“abc.txt”存储在变量$1中

相关内容