• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak wyciąc z String uzysknaego z komendy locate, ostatni węzeł.

0 głosów
33 wizyt
pytanie zadane 29 sierpnia 2016 w Inne języki przez użytkownika ShiroUmizake Pasjonat (17,970 punkty)

Na początek podam treść zadania.

Napisz skrypt która będzie zmieniał nazwy plików w katalogu podanym jako zmienna środowiskowa KATALOG w następujący sposób:

Każde wystąpienie twojego indeksu zamieni na Twoje imię.

indeks: 14216

Imię: Patryk

pliki: document14216 , 14216text.txt >> po rezultacie dokumentPatryk , Patryktext.txt

A jak zmienna jest pusta, to wypisz błąd.

Tak wygląda treść zadania. A oto kod:

#To sa dane poszukiwane
myStudentIndex="14216"
myName=Patryk
#Strzelam, że o to mu chodziło
echo "Podaj katalog ktory chcesz uzyc do zmiany nazw pliku"
read KATALOG
#Sprawdzam czy jest pusta, tu jeszcze działa ok.
if [ $KATALOG ];then
	echo "Dziala"
#Po przeleceniu wielu stacków, ta komenda przypadła mi najbardziej.
#Zauważ , że BASH nie wie jaka jest ściezka (więc pwd, ls odpadają)
	filesOfCatalog=$(locate  $KATALOG)
#Ok jest ścieżka do katalogu 
	echo "PATH OF CATALOG: $filesOfCatalog"
#Szuka klucza po liście (chyba tak to się nazywa?)
	for files in $filesOfCatalog
	do
#Nie wiem dlaczego to działa, ale działa jest nazwa pliku (skopiowane z jakiegoś stacka)
		fileName=${files##*/}
		echo $fileName
#Wchodzi 
				if [ "$fileName" == "$myStundetIndex" ];then
#Tworzy nowego stringa
				newNameFile=$myName$fileName
				echo "Podmieniam nazwe pliku: $files na nowa nazwe $newNameFile"
# I tu dupa. NIE DZIALA. Gdyż files wskazuje wraz z nazwą pliku do którego chcemy zmienić nazwę
				mv $files  $files/$newNameFile
				fi
	done
else
echo "Nie podałeś żadnego parametru"
fi

Czy ktoś jest mi w stanie pomóc :D? Jak wyciągnąć poprawną sciężke albo podać inny sposób? Jestem zielony z basha i przyswajam go bo ... musze. 

Jak rozwiązać problem by szukał podciąg znaków w ciągu znaków? (Jak się !@#^! to prostu przekaże to zadanie dla C, bo tam wydaje mi się, że będzie to łatwiejsze do zrobienia.

 

Z góry dziękuje za wszelką pomoc :)

 

1 odpowiedź

0 głosów
odpowiedź 30 sierpnia 2016 przez użytkownika kantekand Obywatel (1,180 punkty)

staraNazwa - to masz (wraz z pełną ścieżką)
nowaNazwa - to musisz uzyskać zamieniając index na imię (wraz z pełną ścieżką) - w ifie po sprawdzeniu nazwy

nowaNazwa=${staraNazwa/$myStudentIndex/$myName}

na końcu wywołujesz
mv staraNazwa nowaNazwa

 

tutaj przykład zamiany indexu na imię:

#!/bin/bash
myStudentIndex="14216"
myName="Patryk"
przyklad="14216 ma zadanie w bashu"
echo $przyklad
nowaNazwa=${przyklad/$myStudentIndex/$myName}
echo "po zmianie: " $nowaNazwa

 

Podobne pytania

0 głosów
1 odpowiedź 42 wizyt
pytanie zadane 15 grudnia 2015 w Inne języki przez użytkownika Rivi Początkujący (320 punkty)
0 głosów
0 odpowiedzi 38 wizyt
pytanie zadane 26 czerwca 2016 w Inne języki przez użytkownika Dominik Lange Obywatel (1,380 punkty)
0 głosów
1 odpowiedź 128 wizyt
pytanie zadane 31 maja 2015 w Inne języki przez użytkownika ziemjok Obywatel (1,340 punkty)
...