Shell脚本用户提示/输入

7

这是一个有人编写的粗糙的korn shell脚本。我不太了解如何使用shell语法,也不确定是否可能实现。

有没有办法让我运行这个文件并提示输入日期,以便我不必手动进入脚本并每次更改它?

例如,我想用从用户提示中获取的变量替换 "1/12/09"。

#!/bin/ksh
./clear_old
./rooms_xls.pl 1/12/09
cd doors
./doors_xls.pl 1/12/09
3个回答

19

如果你想要提示用户输入日期(而不是将日期作为参数传入),可以使用以下逻辑(或类似的方法):

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

这个循环将会持续提示用户输入日期,直到用户输入了除简单的回车以外的任何内容。

如果您想添加一些简单的验证,并且您使用的是 KSH93 或更高版本的 KSH,请按照以下方式操作:

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

查看ksh93手册获取更多信息。


在Unix系统上(可能与Linux不同,这意味着它在Linux上可能不存在),请查看'ckdate'命令及其相关命令。 - Jonathan Leffler

3
通常,在shell脚本中,可以通过以下方式访问命令行参数:

$0, $1, ... $N

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

./room_xls.pl $1

并像这样运行它

./myscript 1/12/09

2

$1 是第一个命令行参数。一直到 $9。查看这个教程以了解更多基本的ksh语法。


是的,但它并没有按照问题所要求的方式处理提示符。我很乐意看到您鼓励将其拆分为交互式部分和非交互式部分(基本MVC编程),但是... - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接