Menggunakan grep dalam pernyataan if-else [ditutup]

10

Mengapa kode saya tidak menghasilkan jika string yang dimasukkan tidak ada dalam file. Ketika saya memasukkan string dan tidak ada dalam file, tidak ada respons kembali, itu kembali ke loop awal. Dapatkah seseorang memberi tahu saya apa yang salah dengan kode saya?

while :
do
echo "Please enter a string"
read input_string
echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
read input_string1
if grep -q $input_string $input_string1 ; then
echo  "Your string has been found"
fi
done
Adam Poyser
sumber
3
Apa yang kamu harapkan terjadi?
Patrick
Itu dimaksudkan untuk mengatakan bahwa string yang Anda masukkan, itu mencari di file dan mengatakan jika string itu ada. Saya sekarang menyadari bahwa saya harus memasukkan sedikit kode lagi. Terima kasih
Adam Poyser
input_stringOmong-omong bukan nama variabel yang bisa dibilang :)
Marian
1
Anda perlu penawaran ganda di sekitar ekspansi variabel. Baca Mengapa skrip shell saya tercekik di spasi putih atau karakter khusus lainnya?
Gilles 'SO- stop being evil'

Jawaban:

10
while :
 do
     echo "Please enter a string"
     read input_string
     echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
     read input_string1
     grep -q "${input_string}" "${input_string1}"                                                                 
     if [ $? -eq 0 ] ; then
         echo  "Your string has been found"
     else 
         echo "Your string has not been found"
     fi
 done
GMaster
sumber
1
Saya baru saja mencoba kode ini dan berhasil, terima kasih! Saya tidak menyadari bahwa semua masalah saya adalah tidak memiliki pernyataan lain. Terima kasih atas tanggapan cepatnya
Adam Poyser
2
Anda perlu mengutip parameter grep. Pikirkan apa yang akan terjadi jika string pencarian saya menyertakan -v, atau ada spasi dalam nama file.
Ángel
0

Anda menemukan cabang lain yang hilang, tetapi satu saran:

alih-alih menggunakan $input_string $input_string1coba ${input_string} ${input_string1}hanya untuk memastikan Anda tidak $input_stringdiikuti oleh 1.

pengguna85015
sumber
Tidak, pengganti yang Anda ajukan persis sama dengan yang asli. $input_string1adalah nilai variabel input_string1(split dan globbed, karena tidak dikutip), itu tidak melibatkan variabel input_string.
Gilles 'SO- stop being evil'