การใช้ grep ในคำสั่ง if-else [ปิด]


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
if grep -q $input_string $input_string1 ; then
echo  "Your string has been found"
fi
done

3
คุณคาดหวังว่าจะเกิดอะไรขึ้น
Patrick

มันมีความหมายที่จะบอกว่าสตริงที่คุณป้อนมันจะมองหามันในไฟล์และมันบอกว่าถ้าสตริงนั้นมีอยู่ ตอนนี้ฉันรู้แล้วว่าฉันต้องใส่รหัสอีกบิตหนึ่ง ขอบคุณ
Adam Poyser

input_stringไม่ได้จริงๆชื่อตัวแปรพูดโดยวิธี :)
แมเรียน

1
คุณต้องใส่เครื่องหมายอัญประกาศคู่เพื่อขยายตัวแปร อ่านเหตุใดเชลล์สคริปต์ของฉันจึงสำลักช่องว่างหรืออักขระพิเศษอื่น ๆ
Gilles 'หยุดชั่วร้าย'

คำตอบ:


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

1
ฉันเพิ่งลองรหัสนี้และใช้งานได้ดีขอบคุณ! ฉันไม่ได้ตระหนักว่าปัญหาทั้งหมดของฉันคือการไม่มีคำสั่งอื่น ขอบคุณสำหรับการตอบกลับอย่างรวดเร็ว
Adam Poyser

2
คุณต้องอ้างพารามิเตอร์ grep คิดว่าจะเกิดอะไรขึ้นหากสตริงการค้นหาของฉันมี-vหรือมีช่องว่างในชื่อไฟล์
Ángel

0

คุณหาสาขาอื่นที่ขาดหายไปได้ แต่มีข้อเสนอแนะหนึ่งข้อ:

แทนที่จะ$input_string $input_string1ลองใช้${input_string} ${input_string1}เพื่อให้แน่ใจว่าคุณไม่ได้$input_stringตามมาด้วย 1


ไม่การทดแทนที่คุณเสนอนั้นเทียบเท่ากับของแท้ทุกประการ $input_string1คือค่าของตัวแปรinput_string1(แยกและ globbed เพราะมันไม่ได้ยกมา) input_stringมันไม่ได้เกี่ยวข้องกับตัวแปร
Gilles 'หยุดชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.