【问题标题】:pass the date from outside as a parameter将外部日期作为参数传递
【发布时间】:2021-05-05 07:30:16
【问题描述】:

这是我的 Linux 脚本,我想从外部询问用户需要什么日期,然后保存该日期并运行该日期的脚本。

#/bin/bash

cDt=$(date +"%Y%m%d")

cd /home/dwh_landing/temp
echo 'Process_Date,Outfile,Outpath,Process_hour,Process_Minutes,Infile' > ccn_daily_${cDt}.csv

cd /home/dwh_landing/etl_scripts/etl_logs/

awk -F',' '{print $1 "," $2 "," $5}' *ccn-json*${cDt}* | grep 'creditControl.json' | awk -F '/' '{print $0 "," $5}' |  awk 'match($0, /(\s\S*k)/ , a ) {print $0 "," a[1]}' >> /home/dwh_landing/temp/ccn_daily_${cDt}.csv

cd /home/dwh_landing/temp

cat ccn_daily_${cDt}.csv | wc -l >> ccn_daily_${cDt}.csv

现在这个脚本为当前日期文件生成一个 csv,我想为用户请求日期运行这个,我可以从外部传递参数吗? 任何帮助都可能有用。

【问题讨论】:

    标签: linux shell unix awk sh


    【解决方案1】:

    在外面是什么意思?运行脚本时要传递参数吗?如果是这样,您可以运行脚本

    ./myscript $(date +"%Y%m%d")
    

    并将此参数与

    一起使用
    #!/bin/bash
    
    cDt="$1"
    
    ...
    

    这是第一个参数,因为空参数是脚本的名称。

    此外,您可以使用

    验证日期字符串
    if ! date +"%Y%m%d" -d "$cDt" &> /dev/null; then
        echo "$1 - invalid date string"
        exit
    fi
    

    【讨论】:

    • 此脚本查找当前日期的文件并执行(生成)当前日期的 csv。示例文件_20210201,我想为随机日期生成文件示例:生成日期为 2021-01-27 的 csv 然后它应该在 1 月 27 日而不是当前日期获取文件
    • 可以将日期后缀从外部作为参数传递给脚本
    • 如果我理解正确,那么答案包含您问题的解决方案。我唯一没有指定的是检查这个参数是否存在。你可以用if [[ -z "$1" ]]; then echo "no parameters"; exit; fi来做。
    • 您可以在没有date 的情况下传递参数,例如./myscript 20210127。要使用不同的日期格式,您可以更改验证字符串
    【解决方案2】:

    您可以使用 while 循环从用户那里读取日期,直到日期符合要求(日期返回代码 0),此时我们打破循环并执行您的脚本(在本例中为 myscript),传递读取日期变量dat作为参数:

    while true;
    do read -p "Please enter a date in the format i.e. 20210201" dat;
     if date -d "$dat" +"%Y%m%d";
     then 
          break;
     fi;
    done
    myscript "$dat"
    

    然后在您的脚本中,修改以下行:

    cDt=$(date +"%Y%m%d")
    

    到:

    cDt="$1" # SEt cDt to the first passed parameter
    

    【讨论】:

    • 我推荐while true; do read -p "..." dat; userDate=$(date -d "$dat" "+%Y%m%d") && break; done; do_stuff_with "$userDate"——这样,用户可以输入任何(有效)格式的日期,并且脚本可以根据需要使用 ISO 日期格式。
    猜你喜欢
    • 2018-12-11
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2011-08-29
    相关资源
    最近更新 更多