Управление пользовательским вводом - PullRequest
0 голосов
/ 17 января 2011

Я новичок в Bash.Я пытаюсь получить 2 ввода от пользователя в виде: ДД / ММ / ГГГГ ДД / ММ / ГГГГ (день, месяц, год в одной строке).Вот что я пробовал для dd (мне также нужно получить MM и YYYY с обоих входов):

dd1=read | cut -d'/' -f1 (I tried this with backquotes and it didn't work)

[сделать что-нибудь с dd1 ...]

echo $dd1

$ dd1 продолжает показываться пустым.Я мог бы использовать некоторые указатели (не конкретные ответы) для моего домашнего задания.Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 января 2011

Вы получили это задом наперед, попробуйте вот так;

read dd1 && echo $dd1|cut -d'/' -f1 
0 голосов
/ 17 января 2011

Вам нужно сделать это в одной строке или вы хотите, чтобы пользователь вводил две даты в одной строке?

Если все, что вам нужно, это чтобы пользователи вводили две даты в командной строке,Вы можете сделать это:

read -p "Enter two dates in YY/MM/DD format: " date1 date2

Затем, после ввода пользователем двух дат, вы можете проанализировать их, чтобы убедиться, что они в правильном формате.Вы можете продолжать цикл до тех пор, пока даты не будут правильными:

while 1
do
    read -p "Enter two dates in 'DD/MM/YYY' format: date1 date2
    if [ ! date1 ] -o [ ! date2 ]
    then
       echo "You need to enter two dates."
       sleep 2
       continue
    if
    [other tests to verify date formats...]
    break    # Passed all the tests
done

Если вы можете вводить даты по одному, вы можете манипулировать переменной IFS, чтобы использовать косые черты вместо пробелов в качестве разделителей.

OLDIFS="$IFS"   #Save the original
IFS="/"
read -p "Enter your date in MM/DD/YYYY format: " month day year
IFS="$OLDIFS"   #Restore the value of IFS

Это можно поместить в цикл while, как в примере выше, где можно проверить правильность ввода дат.

На самом деле, вы можете сделать это:

OLDIFS="$IFS"   #Save the original
IFS="/ "   #Note space before quotation mark!
read -p "Enter two dates in MM/DD/YYYY format: " month1 day1 year1 month2 day2 year2
IFS="$OLDIFS"   #Restore the value of IFS
echo "Month #1 = $month1  Day #1 = $day1  Year #1 = $year1"
echo "Month #2 = $month1  Day #2 = $day2  Year #2 = $year2"

И получить обе даты в одной командной строке.

0 голосов
/ 17 января 2011

Дайте это попробовать.Это позволит пользователю ввести дату и разделит ее для вас по слешам.

IFS=/ read -r -p "Enter a date in the form DD/MM/YYYY: " dd mm yy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...