Wynik jest pusty z poniższego skryptu. Czego mu brakuje? Próbuję grep ciągSkrypt powłoki grep do grep a string
#!/bin/ksh
file=$abc_def_APP_13.4.5.2
if grep -q abc_def_APP $file; then
echo "File Found"
else
echo "File not Found"
fi
Wynik jest pusty z poniższego skryptu. Czego mu brakuje? Próbuję grep ciągSkrypt powłoki grep do grep a string
#!/bin/ksh
file=$abc_def_APP_13.4.5.2
if grep -q abc_def_APP $file; then
echo "File Found"
else
echo "File not Found"
fi
W bash
użyj <<<
przekierowanie z ciągu (a 'Here string'):
if grep -q abc_def_APP <<< $file
w innych powłokach, może trzeba użyć:
if echo $file | grep -q abc_def_APP
Umieszczam mój then
w następnym wierszu; jeśli chcesz, aby Twój numer then
był w tej samej linii, dodaj po tym, co napisałem, ; then
.
Zauważ, że to zadanie:
file=$abc_def_APP_13.4.5.2
jest dość dziwne; przyjmuje wartość zmiennej środowiskowej ${abc_def_APP_13}
i dodaje .4.5.2
do końca (musi to być env var, ponieważ możemy zobaczyć początek skryptu). Prawdopodobnie zamierzał napisać:
file=abc_def_APP_13.4.5.2
W ogóle, należy załączyć referencje do zmiennych posiadających nazwy plików w cudzysłów, aby uniknąć problemów ze spacjami itp w nazwach plików. Nie jest to tutaj istotne, ale dobre praktyki to dobre praktyki:
if grep -q abc_def_APP <<< "$file"
if echo "$file" | grep -q abc_def_APP
Jeśli używam 'if echo $ file | grep -q abc_def_APP' drukuje zawartość pliku $, którego nie chcę do – Jill448
Wybrałeś opcję '-q', aby uruchomić' grep' w trybie 'cichym' (za [POSIX] (http: // pubs .opengroup.org/onlinepubs/9699919799/utilities/grep.html)); nie powinien niczego wyprowadzać. Jeśli twoja wersja 'grep' ma inne rozumienie' -q', będziesz musiał spojrzeć na swoją stronę man 'grep' lub przekierować do'/dev/null'. –
Pierwszy zadziałał. 'if grep -q abc_def_APP <<< $ file' – Jill448
Fuj! Użyj ciągi powłoki odpowiadającej
czy nie ryzykujesz dopasowania wielu plików' * abc_def_APP * 'i zrujnujesz warunek w procesie? Co jeśli '$ plik' jest' abc_def_APP1' i '* abc_def_APP *' rozwinięty na 'abc_def_APP1 abc_def_APP2', warunek zostanie oceniony jako fałszywy. – Anthony
i o "Fuj!" część; Całkowicie się z tobą zgadzam! cała powłoka poleceń uniksowych (typu unix) jest obrzydliwa ... ale bez niej nie możesz żyć, prawda? – Anthony
Wewnątrz podwójnych nawiasów dopasowujemy wzorce do lewego ciągu znaków, nie pasując do nazw plików. –
Dlaczego liczba #! linia powiedzieć ksh? – jman
Jaka jest wartość 'file'? Podejrzewam, że możesz mieć problem z RHS tego zadania. – chepner