AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 535480
Accepted
user3901666
user3901666
Asked: 2019-08-14 20:59:38 +0800 CST2019-08-14 20:59:38 +0800 CST 2019-08-14 20:59:38 +0800 CST

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

  • 772

我有一个脚本如下

    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 条目的参数。

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

shell-script arguments
  • 2 2 个回答
  • 132 Views

2 个回答

  • Voted
  1. Best Answer
    nohillside
    2019-08-14T22:16:58+08:002019-08-14T22:16:58+08:00

    根据您更新的问题更新

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

    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不会因任何原因而改变。

    • 1
  2. thinkingeye
    2019-08-14T21:09:08+08:002019-08-14T21:09:08+08:00

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

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

    sh script.sh abc.txt
    

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

    • -1

相关问题

  • 在awk中的两行之间减去相同的列

  • 打印文件行及其长度的脚本[关闭]

  • 通过命令的标准输出以编程方式导出环境变量[重复]

  • 按分隔符拆分并连接字符串问题

  • MySQL Select with function IN () with bash array

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve