problem ze skryptem

Potrzebujesz pomocy z C, C++, perl, python, itp.
linux2525
Posty: 1
Rejestracja: 08 marca 2020, 15:11

problem ze skryptem

Post autor: linux2525 » 08 marca 2020, 15:16

Witam
Potrzebuje pomocy przy jednym skrypcie.Jego treść brzmi tak:Napisz skrypt, który poprosi Cię o wpisanie dowolnego zdania, następnie poprosi o numer wyrazu w zdaniu i wyświetli ten wyraz.

Zacząłem go wykonywać, ale niestety dalej mam problem. Oto moja część:

Kod: Zaznacz cały

#!/bin/bash
echo "Podaj dowolne zdanie"
read zdanie
echo $zdanie
echo "Podaj numer wyrazu w zdaniu"
read numer

i dalej mam problem, ponieważ nie za bardzo wiem jakiej komendy użyć
Napisałem tak:

Kod: Zaznacz cały

case "$numer" in
"1") grep ... $zdanie
Jeśli ktoś jest w stanie mi pomóc to będę bardzo wdzięczny.

Awatar użytkownika
dedito
Moderator
Posty: 3139
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: problem ze skryptem

Post autor: dedito » 08 marca 2020, 18:48

Kod: Zaznacz cały

echo $zdanie | cut -d " " -f $numer

Awatar użytkownika
lizard
Beginner
Posty: 276
Rejestracja: 08 lutego 2016, 18:47

Re: problem ze skryptem

Post autor: lizard » 11 marca 2020, 20:08

dedito pisze:
08 marca 2020, 18:48

Kod: Zaznacz cały

echo $zdanie | cut -d " " -f $numer
Jak się trafią dwie spacje lub "-e" w połączeniu z "\n", to cały misterny plan pójdzie w pis...:

Kod: Zaznacz cały

$ zdanie='-e ala\nma kota'
$ echo $zdanie
ala
ma kota
Jeżeli to Bash, co sugeruje pierwszy wiersz skryptu, to proponuję takie coś:

Kod: Zaznacz cały

read -r -p 'Podaj dowolne zdanie ' -a zdanie
read -p 'Podaj numer wyrazu w zdaniu ' numer
test "$numer" -le ${#zdanie[@]} -a "$numer" -gt 0 && echo "${zdanie[((numer-1))]}"
  1. Zdanie trafia do tablicy indeksowanej od zera, gdzie każde słowo jest jej elementem
  2. Pobranie numeru słowa
  3. Sprawdzenie, czy podana liczba mieści się w zakresie liczny słów w zdaniu i wyświetlenie wskazanego słowa
Kod zgody ze standardem POSIX:

Kod: Zaznacz cały

echo 'Podaj dowolne zdanie'
read -r zdanie
echo 'Podaj numer wyrazu w zdaniu'
read -r numer
printf '%s' "$t" | awk "{print \$$n}"
POSIX nie przewiduje tablic, więc zdanie trafia jako łańcuch znaków do zmiennej. "Printf" zabezpiecza nas przed niespodziankami takimi jak pokazałem na początku. "awk" wypisuje n-ty element z podanego zdania.

Polecam:

ODPOWIEDZ