【问题标题】:Shell script user prompt/inputShell 脚本用户提示/输入
【发布时间】:2010-10-01 03:54:57
【问题描述】:

这是别人写的粗略的 korn shell 脚本。我对使用 shell 语法了解不多,我什至不确定这是否可行。

有什么方法可以让我运行这个文件并被提示输入日期,这样我就不必每次都手动进入脚本并更改它?

例如,我想用取自用户提示的变量替换“1/12/09”。

#!/bin/ksh
./clear_old
./rooms_xls.pl 1/12/09
cd doors
./doors_xls.pl 1/12/09

【问题讨论】:

    标签: shell input variables ksh prompt


    【解决方案1】:

    如果您想得到提示(而不是将日期作为参数传递),请使用以下逻辑(或类似的东西):

    date=
    while [ -z $date ]
    do
        echo -n 'Date? '
        read date
    done
    

    该循环将继续提示输入日期,直到用户输入除简单 RETURN 之外的其他内容(任何内容)。

    如果您想添加一些简单的验证,并且您使用的是 KSH 是 KSH93 或更好,请执行以下操作:

    date=
    while [ -z $date ]
    do
        echo -n 'Date? '
        read date
        if [[ $date =~ ^[0-9]{1,2}/[0-9]{1,2}/[0-9]{1,4}$ ]]
        then
            break
        fi
        date=
    done
    

    请参阅the ksh93 man page 了解更多信息。

    【讨论】:

    • 在 Unix 系统上(可能与 Linux 不同,这意味着它在 Linux 上可能不存在),请查看“ckdate”命令及其相关命令。
    【解决方案2】:

    一般来说,可以从 shell 脚本中访问命令行参数,如下所示:

    $0, $1, ... $N
    

    所以你可以像这样替换硬编码的日期:

    ./room_xls.pl $1
    

    然后像这样运行

    ./myscript 1/12/09
    

    【讨论】:

      【解决方案3】:

      $1 是第一个命令行参数。这高达 9 美元。查看tutorial 了解更多基本的 ksh 语法。

      【讨论】:

      • 是的,但它不处理问题所提出的提示。我很高兴看到你鼓励将交互部分和非交互部分(基本的 MVC 编程)分开,但是......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 2015-08-31
      • 1970-01-01
      相关资源
      最近更新 更多