我有一个如下的脚本
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中